Эх сурвалжийг харах

😎1、将NEST换成Elastic.Clients.Elasticsearch 2、代码优化

zuohuaijun 2 жил өмнө
parent
commit
ca20b1ff62
28 өөрчлөгдсөн 126 нэмэгдсэн , 141 устгасан
  1. 2 2
      Admin.NET/Admin.NET.Application/Configuration/Swagger.json
  2. 1 1
      Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj
  3. 2 0
      Admin.NET/Admin.NET.Core/Attribute/IdempotentAttribute.cs
  4. 1 0
      Admin.NET/Admin.NET.Core/Attribute/MaxValueAttribute.cs
  5. 1 0
      Admin.NET/Admin.NET.Core/Attribute/MinValueAttribute.cs
  6. 4 4
      Admin.NET/Admin.NET.Core/Const/CommonConst.cs
  7. 1 1
      Admin.NET/Admin.NET.Core/EventBus/RedisQueue.cs
  8. 2 2
      Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs
  9. 3 3
      Admin.NET/Admin.NET.Core/Job/LogJob.cs
  10. 2 2
      Admin.NET/Admin.NET.Core/Job/OnlineUserJob.cs
  11. 2 1
      Admin.NET/Admin.NET.Core/Logging/DatabaseLoggingWriter.cs
  12. 4 4
      Admin.NET/Admin.NET.Core/Logging/ElasticSearchLoggingWriter.cs
  13. 12 14
      Admin.NET/Admin.NET.Core/Logging/ElasticSearchSetup.cs
  14. 1 1
      Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs
  15. 34 46
      Admin.NET/Admin.NET.Core/Service/Auth/SysLdapService.cs
  16. 1 1
      Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenConfigService.cs
  17. 9 7
      Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs
  18. 1 1
      Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs
  19. 1 1
      Admin.NET/Admin.NET.Core/Service/Job/JobClusterServer.cs
  20. 0 3
      Admin.NET/Admin.NET.Core/Service/Message/SysMessageService.cs
  21. 6 6
      Admin.NET/Admin.NET.Core/Service/OpenAccess/SysOpenAccessService.cs
  22. 2 2
      Admin.NET/Admin.NET.Core/Service/Region/SysRegionService.cs
  23. 7 7
      Admin.NET/Admin.NET.Core/Service/Server/SysServerService.cs
  24. 22 21
      Admin.NET/Admin.NET.Core/Util/ComputerUtil.cs
  25. 2 2
      Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs
  26. 1 1
      Admin.NET/Admin.NET.Web.Core/Startup.cs
  27. 1 7
      Admin.NET/Plugins/Admin.NET.Plugin.GoView/Service/GoViewPro/GoViewProService.cs
  28. 1 1
      Admin.NET/Plugins/Admin.NET.Plugin.GoView/Service/GoViewSys/GoViewSysService.cs

+ 2 - 2
Admin.NET/Admin.NET.Application/Configuration/Swagger.json

@@ -7,7 +7,7 @@
       {
         "Group": "Default",
         "Title": "Admin.NET 通用权限开发平台",
-        "Description": "让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/>",
+        "Description": "让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><br/>👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!",
         "Version": "1.0.0"
         //"TermsOfService": "https://dotnetchina.gitee.io/furion/",
         //"Contact": {
@@ -18,7 +18,7 @@
       {
         "Group": "All Groups",
         "Title": "所有接口",
-        "Description": "让 .NET 开发更简单、更通用、更流行。前后端分离架构(.NET6/Vue3),开箱即用紧随前沿技术。<br/>",
+        "Description": "让 .NET 开发更简单、更通用、更流行。整合最新技术,模块插件式开发,前后端分离,开箱即用。<br/><br/>👮不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关!",
         "Version": "1.0.0"
         //"TermsOfService": "https://dotnetchina.gitee.io/furion/",
         //"Contact": {

+ 1 - 1
Admin.NET/Admin.NET.Core/Admin.NET.Core.csproj

@@ -21,6 +21,7 @@
     <PackageReference Include="AspNet.Security.OAuth.Gitee" Version="6.0.15" />
     <PackageReference Include="AspNet.Security.OAuth.Weixin" Version="6.0.15" />
     <PackageReference Include="AspNetCoreRateLimit" Version="5.0.0" />
+    <PackageReference Include="Elastic.Clients.Elasticsearch" Version="8.13.5" />
     <PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="4.9.2.16" />
     <PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="4.9.2.16" />
     <PackageReference Include="Furion.Pure" Version="4.9.2.16" />
@@ -33,7 +34,6 @@
     <PackageReference Include="MailKit" Version="4.4.0" />
     <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="6.0.29" />
     <PackageReference Include="Microsoft.AspNetCore.SignalR.StackExchangeRedis" Version="6.0.29" />
-    <PackageReference Include="NEST" Version="7.17.5" />
     <PackageReference Include="NewLife.Redis" Version="5.6.2024.402" />
     <PackageReference Include="Novell.Directory.Ldap.NETStandard" Version="3.6.0" />
     <PackageReference Include="OnceMi.AspNetCore.OSS" Version="1.1.9" />

+ 2 - 0
Admin.NET/Admin.NET.Core/Attribute/IdempotentAttribute.cs

@@ -13,6 +13,8 @@ namespace Admin.NET.Core;
 /// <summary>
 /// 防止重复请求过滤器特性
 /// </summary>
+[SuppressSniffer]
+[AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)]
 public class IdempotentAttribute : Attribute, IAsyncActionFilter
 {
     /// <summary>

+ 1 - 0
Admin.NET/Admin.NET.Core/Attribute/MaxValueAttribute.cs

@@ -11,6 +11,7 @@ namespace Admin.NET.Core;
 /// <summary>
 /// 最大值校验
 /// </summary>
+[SuppressSniffer]
 public class MaxValueAttribute : ValidationAttribute
 {
     private double MaxValue { get; }

+ 1 - 0
Admin.NET/Admin.NET.Core/Attribute/MinValueAttribute.cs

@@ -11,6 +11,7 @@ namespace Admin.NET.Core;
 /// <summary>
 /// 最小值校验
 /// </summary>
+[SuppressSniffer]
 public class MinValueAttribute : ValidationAttribute
 {
     private double MinValue { get; set; }

+ 4 - 4
Admin.NET/Admin.NET.Core/Const/CommonConst.cs

@@ -69,10 +69,10 @@ public class CommonConst
     /// </summary>
     public const string SysAdminRole = "sys_admin";
 
-    /// <summary>
-    /// 开启全局脱敏处理(默认不开启)
-    /// </summary>
-    public static bool SysSensitiveDetection = false;
+    ///// <summary>
+    ///// 开启全局脱敏处理(默认不开启)
+    ///// </summary>
+    //public static bool SysSensitiveDetection = false;
 
     /// <summary>
     /// 开启域登录验证

+ 1 - 1
Admin.NET/Admin.NET.Core/EventBus/RedisQueue.cs

@@ -15,7 +15,7 @@ namespace Admin.NET.Core;
 /// </summary>
 public static class RedisQueue
 {
-    private static ICache _cache = App.GetRequiredService<ICache>();
+    private static readonly ICache _cache = App.GetRequiredService<ICache>();
 
     /// <summary>
     /// 获取可信队列,需要确认

+ 2 - 2
Admin.NET/Admin.NET.Core/Job/EnumToDictJob.cs

@@ -27,8 +27,8 @@ public class EnumToDictJob : IJob
     public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken)
     {
         using var serviceScope = _scopeFactory.CreateScope();
-        var sysEnumService = serviceScope.ServiceProvider.GetService<SysEnumService>();
-        var db = serviceScope.ServiceProvider.GetService<ISqlSugarClient>().CopyNew();
+        var sysEnumService = serviceScope.ServiceProvider.GetRequiredService<SysEnumService>();
+        var db = serviceScope.ServiceProvider.GetRequiredService<ISqlSugarClient>().CopyNew();
 
         var enumTypeList = sysEnumService.GetEnumTypeList();
         var enumCodeList = enumTypeList.Select(x => x.TypeName);

+ 3 - 3
Admin.NET/Admin.NET.Core/Job/LogJob.cs

@@ -26,9 +26,9 @@ public class LogJob : IJob
     {
         using var serviceScope = _scopeFactory.CreateScope();
 
-        var logVisRep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysLogVis>>();
-        var logOpRep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysLogOp>>();
-        var logDiffRep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysLogDiff>>();
+        var logVisRep = serviceScope.ServiceProvider.GetRequiredService<SqlSugarRepository<SysLogVis>>();
+        var logOpRep = serviceScope.ServiceProvider.GetRequiredService<SqlSugarRepository<SysLogOp>>();
+        var logDiffRep = serviceScope.ServiceProvider.GetRequiredService<SqlSugarRepository<SysLogDiff>>();
 
         var daysAgo = 30; // 删除30天以前
         await logVisRep.CopyNew().AsDeleteable().Where(u => (DateTime)u.CreateTime < DateTime.Now.AddDays(-daysAgo)).ExecuteCommandAsync(stoppingToken); // 删除访问日志

+ 2 - 2
Admin.NET/Admin.NET.Core/Job/OnlineUserJob.cs

@@ -26,7 +26,7 @@ public class OnlineUserJob : IJob
     {
         using var serviceScope = _scopeFactory.CreateScope();
 
-        var rep = serviceScope.ServiceProvider.GetService<SqlSugarRepository<SysOnlineUser>>();
+        var rep = serviceScope.ServiceProvider.GetRequiredService<SqlSugarRepository<SysOnlineUser>>();
         await rep.CopyNew().AsDeleteable().ExecuteCommandAsync(stoppingToken);
 
         var originColor = Console.ForegroundColor;
@@ -35,6 +35,6 @@ public class OnlineUserJob : IJob
         Console.ForegroundColor = originColor;
 
         // 缓存租户列表
-        await serviceScope.ServiceProvider.GetService<SysTenantService>().CacheTenant();
+        await serviceScope.ServiceProvider.GetRequiredService<SysTenantService>().CacheTenant();
     }
 }

+ 2 - 1
Admin.NET/Admin.NET.Core/Logging/DatabaseLoggingWriter.cs

@@ -7,6 +7,7 @@
 // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
 
 using IPTools.Core;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
 
 namespace Admin.NET.Core;
 
@@ -173,7 +174,7 @@ public class DatabaseLoggingWriter : IDatabaseLoggingWriter, IDisposable
         }
         catch (Exception ex)
         {
-            _logger.LogError(ex, ex.Message);
+            _logger.LogError(ex, "操作日志入库");
         }
     }
 

+ 4 - 4
Admin.NET/Admin.NET.Core/Logging/ElasticSearchLoggingWriter.cs

@@ -6,7 +6,7 @@
 //
 // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
 
-using Nest;
+using Elastic.Clients.Elasticsearch;
 
 namespace Admin.NET.Core;
 
@@ -16,13 +16,13 @@ namespace Admin.NET.Core;
 public class ElasticSearchLoggingWriter : IDatabaseLoggingWriter, IDisposable
 {
     private readonly IServiceScope _serviceScope;
-    private readonly ElasticClient _esClient;
+    private readonly ElasticsearchClient _esClient;
     private readonly SysConfigService _sysConfigService;
 
     public ElasticSearchLoggingWriter(IServiceScopeFactory scopeFactory)
     {
         _serviceScope = scopeFactory.CreateScope();
-        _esClient = _serviceScope.ServiceProvider.GetRequiredService<ElasticClient>();
+        _esClient = _serviceScope.ServiceProvider.GetRequiredService<ElasticsearchClient>();
         _sysConfigService = _serviceScope.ServiceProvider.GetRequiredService<SysConfigService>();
     }
 
@@ -88,7 +88,7 @@ public class ElasticSearchLoggingWriter : IDatabaseLoggingWriter, IDisposable
             CreateUserId = string.IsNullOrWhiteSpace(userId) ? 0 : long.Parse(userId),
             TenantId = string.IsNullOrWhiteSpace(tenantId) ? 0 : long.Parse(tenantId)
         };
-        await _esClient.IndexDocumentAsync(sysLogOp);
+        await _esClient.IndexAsync(sysLogOp);
     }
 
     /// <summary>

+ 12 - 14
Admin.NET/Admin.NET.Core/Logging/ElasticSearchSetup.cs

@@ -6,8 +6,8 @@
 //
 // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
 
-using Elasticsearch.Net;
-using Nest;
+using Elastic.Clients.Elasticsearch;
+using Elastic.Transport;
 
 namespace Admin.NET.Core;
 
@@ -23,23 +23,23 @@ public static class ElasticSearchSetup
 
         var uris = option.ServerUris.Select(u => new Uri(u));
         // 集群
-        var connectionPool = new SniffingConnectionPool(uris);
-        var connectionSettings = new ConnectionSettings(connectionPool).DefaultIndex(option.DefaultIndex);
+        var connectionPool = new StaticNodePool(uris);
+        var connectionSettings = new ElasticsearchClientSettings(connectionPool).DefaultIndex(option.DefaultIndex);
         // 单连接
-        //var connectionSettings = new ConnectionSettings(new SingleNodeConnectionPool(uris.FirstOrDefault())).DefaultIndex(option.DefaultIndex);
+        //var connectionSettings = new ElasticsearchClientSettings(new StaticNodePool(new List<Uri> { uris.FirstOrDefault() })).DefaultIndex(option.DefaultIndex);
 
         // 认证类型
-        if (option.AuthType == ElasticSearchAuthTypeEnum.Basic)// Basic 认证
+        if (option.AuthType == ElasticSearchAuthTypeEnum.Basic) // Basic 认证
         {
-            connectionSettings.BasicAuthentication(option.User, option.Password);
+            connectionSettings.Authentication(new BasicAuthentication(option.User, option.Password));
         }
-        else if (option.AuthType == ElasticSearchAuthTypeEnum.ApiKey) //ApiKey 认证
+        else if (option.AuthType == ElasticSearchAuthTypeEnum.ApiKey) // ApiKey 认证
         {
-            connectionSettings.ApiKeyAuthentication(option.ApiId, option.ApiKey);
+            connectionSettings.Authentication(new ApiKey(option.ApiKey));
         }
-        else if (option.AuthType == ElasticSearchAuthTypeEnum.Base64ApiKey)// Base64ApiKey 认证
+        else if (option.AuthType == ElasticSearchAuthTypeEnum.Base64ApiKey) // Base64ApiKey 认证
         {
-            connectionSettings.ApiKeyAuthentication(new ApiKeyAuthenticationCredentials(option.Base64ApiKey));
+            connectionSettings.Authentication(new Base64ApiKey(option.Base64ApiKey));
         }
         else return;
 
@@ -49,9 +49,7 @@ public static class ElasticSearchSetup
             connectionSettings.CertificateFingerprint(option.Fingerprint);
         }
 
-        var client = new ElasticClient(connectionSettings);
-        client.Indices.Create(option.DefaultIndex, u => u.Map<SysLogOp>(m => m.AutoMap()));
-
+        var client = new ElasticsearchClient(connectionSettings);
         services.AddSingleton(client); // 单例注册
     }
 }

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -102,7 +102,7 @@ public class SysAuthService : IDynamicApiController, ITransient
             {
                 VerifyPassword(input, keyErrorPasswordCount, errorPasswordCount, user);
             }
-            else if (!await _sysLdapService.Auth(tenant.Id, userLdap.Account, input.Password))
+            else if (!await _sysLdapService.AuthAccount(tenant.Id, userLdap.Account, input.Password))
             {
                 _sysCacheService.Set(keyErrorPasswordCount, ++errorPasswordCount, TimeSpan.FromMinutes(30));
                 throw Oops.Oh(ErrorCodeEnum.D1000);

+ 34 - 46
Admin.NET/Admin.NET.Core/Service/Auth/SysLdapService.cs

@@ -11,26 +11,24 @@ using Novell.Directory.Ldap;
 namespace Admin.NET.Core;
 
 /// <summary>
-/// 系统域登录信息配置服务
+/// 系统域登录配置服务 💥
 /// </summary>
-[ApiDescriptionSettings(Order = 100)]
+[ApiDescriptionSettings(Order = 485)]
 public class SysLdapService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysLdap> _sysLdapRep;
-    private readonly SysUserLdapService _sysUserLdapService;
 
-    public SysLdapService(SqlSugarRepository<SysLdap> rep, SysUserLdapService sysUserLdapService)
+    public SysLdapService(SqlSugarRepository<SysLdap> sysLdapRep)
     {
-        _sysLdapRep = rep;
-        _sysUserLdapService = sysUserLdapService;
+        _sysLdapRep = sysLdapRep;
     }
 
     /// <summary>
-    /// 获取系统域登录信息配置分页列表
+    /// 获取系统域登录配置分页列表
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [DisplayName("获取系统域登录信息配置分页列表")]
+    [DisplayName("获取系统域登录配置分页列表")]
     public async Task<SqlSugarPagedList<SysLdap>> Page(SysLdapInput input)
     {
         return await _sysLdapRep.AsQueryable()
@@ -41,12 +39,12 @@ public class SysLdapService : IDynamicApiController, ITransient
     }
 
     /// <summary>
-    /// 增加系统域登录信息配置
+    /// 增加系统域登录配置
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [ApiDescriptionSettings(Name = "Add"), HttpPost]
-    [DisplayName("增加系统域登录信息配置")]
+    [DisplayName("增加系统域登录配置")]
     public async Task<long> Add(AddSysLdapInput input)
     {
         var entity = input.Adapt<SysLdap>();
@@ -56,12 +54,12 @@ public class SysLdapService : IDynamicApiController, ITransient
     }
 
     /// <summary>
-    /// 更新系统域登录信息配置
+    /// 更新系统域登录配置
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [ApiDescriptionSettings(Name = "Update"), HttpPost]
-    [DisplayName("更新系统域登录信息配置")]
+    [DisplayName("更新系统域登录配置")]
     public async Task Update(UpdateSysLdapInput input)
     {
         var entity = input.Adapt<SysLdap>();
@@ -73,12 +71,12 @@ public class SysLdapService : IDynamicApiController, ITransient
     }
 
     /// <summary>
-    /// 删除系统域登录信息配置
+    /// 删除系统域登录配置
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
     [ApiDescriptionSettings(Name = "Delete"), HttpPost]
-    [DisplayName("删除系统域登录信息配置")]
+    [DisplayName("删除系统域登录配置")]
     public async Task Delete(DeleteSysLdapInput input)
     {
         var entity = await _sysLdapRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
@@ -87,36 +85,35 @@ public class SysLdapService : IDynamicApiController, ITransient
     }
 
     /// <summary>
-    /// 获取系统域登录信息配置详情
+    /// 获取系统域登录配置详情
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [DisplayName("获取系统域登录信息配置详情")]
+    [DisplayName("获取系统域登录配置详情")]
     public async Task<SysLdap> GetDetail([FromQuery] DetailSysLdapInput input)
     {
         return await _sysLdapRep.GetFirstAsync(u => u.Id == input.Id);
     }
 
     /// <summary>
-    /// 获取系统域登录信息配置列表
+    /// 获取系统域登录配置列表
     /// </summary>
-    /// <param name="input"></param>
     /// <returns></returns>
-    [DisplayName("获取系统域登录信息配置列表")]
-    public async Task<List<SysLdap>> GetList([FromQuery] SysLdapInput input)
+    [DisplayName("获取系统域登录配置列表")]
+    public async Task<List<SysLdap>> GetList()
     {
         return await _sysLdapRep.AsQueryable().Select<SysLdap>().ToListAsync();
     }
 
     /// <summary>
-    /// 账号验证
+    /// 验证账号
     /// </summary>
     /// <param name="account">域用户</param>
     /// <param name="password">密码</param>
     /// <param name="tenantId">租户</param>
     /// <returns></returns>
     [NonAction]
-    public async Task<bool> Auth(long tenantId, string account, string password)
+    public async Task<bool> AuthAccount(long tenantId, string account, string password)
     {
         var ldap = await _sysLdapRep.GetFirstAsync(u => u.TenantId == tenantId) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
         var ldapConn = new LdapConnection();
@@ -142,17 +139,12 @@ public class SysLdapService : IDynamicApiController, ITransient
         }
         catch (LdapException e)
         {
-            switch (e.ResultCode)
+            return e.ResultCode switch
             {
-                case LdapException.NoSuchObject:
-                case LdapException.NoSuchAttribute:
-                    throw Oops.Oh(ErrorCodeEnum.D0009);
-                case LdapException.InvalidCredentials:
-                    return false;
-
-                default:
-                    throw Oops.Oh(e.Message);
-            }
+                LdapException.NoSuchObject or LdapException.NoSuchAttribute => throw Oops.Oh(ErrorCodeEnum.D0009),
+                LdapException.InvalidCredentials => false,
+                _ => throw Oops.Oh(e.Message),
+            };
         }
         finally
         {
@@ -167,7 +159,7 @@ public class SysLdapService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [DisplayName("同步域用户")]
-    public async Task SyncSysLdapUser(SyncSysLdapInput input)
+    public async Task SyncUser(SyncSysLdapInput input)
     {
         var ldap = await _sysLdapRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
         var ldapConn = new LdapConnection();
@@ -191,7 +183,7 @@ public class SysLdapService : IDynamicApiController, ITransient
                 }
                 var attrs = entity.GetAttributeSet();
                 if (attrs.Count == 0 || attrs.ContainsKey("OU"))
-                    LdapUserSearchDn(ldapConn, ldap, listUserLdap, entity.Dn);
+                    SearchDnLdapUser(ldapConn, ldap, listUserLdap, entity.Dn);
                 else
                 {
                     var sysUserLdap = new SysUserLdap
@@ -206,19 +198,15 @@ public class SysLdapService : IDynamicApiController, ITransient
             if (listUserLdap.Count == 0)
                 return;
 
-            await _sysUserLdapService.InsertUserLdaps(ldap.TenantId.Value, listUserLdap);
+            await App.GetRequiredService<SysUserLdapService>().InsertUserLdaps(ldap.TenantId.Value, listUserLdap);
         }
         catch (LdapException e)
         {
-            switch (e.ResultCode)
+            throw e.ResultCode switch
             {
-                case LdapException.NoSuchObject:
-                case LdapException.NoSuchAttribute:
-                    throw Oops.Oh(ErrorCodeEnum.D0009);
-                case LdapException.InvalidCredentials:
-                default:
-                    throw Oops.Oh(e.Message);
-            }
+                LdapException.NoSuchObject or LdapException.NoSuchAttribute => Oops.Oh(ErrorCodeEnum.D0009),
+                _ => Oops.Oh(e.Message),
+            };
         }
         finally
         {
@@ -227,13 +215,13 @@ public class SysLdapService : IDynamicApiController, ITransient
     }
 
     /// <summary>
-    /// 域用户遍历查询
+    /// 遍历查询域用户
     /// </summary>
     /// <param name="conn"></param>
     /// <param name="ldap"></param>
     /// <param name="listUserLdap"></param>
     /// <param name="baseDn"></param>
-    private void LdapUserSearchDn(LdapConnection conn, SysLdap ldap, List<SysUserLdap> listUserLdap, string baseDn)
+    private static void SearchDnLdapUser(LdapConnection conn, SysLdap ldap, List<SysUserLdap> listUserLdap, string baseDn)
     {
         var userEntitys = conn.Search(baseDn, LdapConnection.ScopeOne, "(objectClass=*)", null, false);
         while (userEntitys.HasMore())
@@ -250,7 +238,7 @@ public class SysLdapService : IDynamicApiController, ITransient
             }
             var attrs = entity.GetAttributeSet();
             if (attrs.Count == 0 || attrs.ContainsKey("OU"))
-                LdapUserSearchDn(conn, ldap, listUserLdap, entity.Dn);
+                SearchDnLdapUser(conn, ldap, listUserLdap, entity.Dn);
             else
             {
                 var sysUserLdap = new SysUserLdap

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenConfigService.cs

@@ -143,7 +143,7 @@ public class SysCodeGenConfigService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="codeGenConfig"></param>
     /// <returns></returns>
-    private string GetDefaultQueryType(SysCodeGenConfig codeGenConfig)
+    private static string GetDefaultQueryType(SysCodeGenConfig codeGenConfig)
     {
         return (codeGenConfig.NetType?.TrimEnd('?')) switch
         {

+ 9 - 7
Admin.NET/Admin.NET.Core/Service/CodeGen/SysCodeGenService.cs

@@ -120,7 +120,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [DisplayName("获取数据库库集合")]
-    public async Task<List<DatabaseOutput>> GetDatabaseList()
+    public static async Task<List<DatabaseOutput>> GetDatabaseList()
     {
         var dbConfigs = App.GetOptions<DbConnectionOptions>().ConnectionConfigs;
         return await Task.FromResult(dbConfigs.Adapt<List<DatabaseOutput>>());
@@ -220,18 +220,20 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         for (int i = result.Count - 1; i >= 0; i--)
         {
             var columnOutput = result[i];
-            // 先找自定义字段名的
-            var propertyInfo = entityProperties.FirstOrDefault(p => (p.GetCustomAttribute<SugarColumn>()?.ColumnName ?? "").ToLower() == columnOutput.ColumnName.ToLower());
-            // 如果找不到就再找自动生成字段名的(并且过滤掉没有SugarColumn的属性)
-            if (propertyInfo == null)
-                propertyInfo = entityProperties.FirstOrDefault(p => p.GetCustomAttribute<SugarColumn>() != null && p.Name.ToLower() == (config.DbSettings.EnableUnderLine ? CodeGenUtil.CamelColumnName(columnOutput.ColumnName, entityBasePropertyNames).ToLower() : columnOutput.ColumnName.ToLower()));
+            // 先找自定义字段名的,如果找不到就再找自动生成字段名的(并且过滤掉没有SugarColumn的属性)
+            var propertyInfo = entityProperties.FirstOrDefault(p => (p.GetCustomAttribute<SugarColumn>()?.ColumnName ?? "").ToLower() == columnOutput.ColumnName.ToLower()) ??
+                entityProperties.FirstOrDefault(p => p.GetCustomAttribute<SugarColumn>() != null && p.Name.ToLower() == (config.DbSettings.EnableUnderLine
+                ? CodeGenUtil.CamelColumnName(columnOutput.ColumnName, entityBasePropertyNames).ToLower()
+                : columnOutput.ColumnName.ToLower()));
             if (propertyInfo != null)
             {
                 columnOutput.PropertyName = propertyInfo.Name;
                 columnOutput.ColumnComment = propertyInfo.GetCustomAttribute<SugarColumn>().ColumnDescription;
             }
             else
-                result.RemoveAt(i); //移除没有定义此属性的字段
+            {
+                result.RemoveAt(i); // 移除没有定义此属性的字段
+            }
         }
         return result;
     }

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs

@@ -36,7 +36,7 @@ public class SysDatabaseService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [DisplayName("获取库列表")]
-    public List<string> GetList()
+    public static List<string> GetList()
     {
         return App.GetOptions<DbConnectionOptions>().ConnectionConfigs.Select(u => u.ConfigId.ToString()).ToList();
     }

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Job/JobClusterServer.cs

@@ -100,7 +100,7 @@ public class JobClusterServer : IJobClusterServer
     /// </summary>
     /// <param name="clusterId">集群 Id</param>
     /// <returns></returns>
-    private async Task WorkNowAsync(string clusterId)
+    private static async Task WorkNowAsync(string clusterId)
     {
         var _sysJobClusterRep = App.GetRequiredService<SqlSugarRepository<SysJobCluster>>();
         // 在作业集群表中,更新 clusterId 的 status 为 ClusterStatus.Working

+ 0 - 3
Admin.NET/Admin.NET.Core/Service/Message/SysMessageService.cs

@@ -17,15 +17,12 @@ namespace Admin.NET.Core.Service;
 public class SysMessageService : IDynamicApiController, ITransient
 {
     private readonly SysCacheService _sysCacheService;
-    private readonly EmailOptions _emailOptions;
     private readonly IHubContext<OnlineUserHub, IOnlineUserHub> _chatHubContext;
 
     public SysMessageService(SysCacheService sysCacheService,
-        IOptions<EmailOptions> emailOptions,
         IHubContext<OnlineUserHub, IOnlineUserHub> chatHubContext)
     {
         _sysCacheService = sysCacheService;
-        _emailOptions = emailOptions.Value;
         _chatHubContext = chatHubContext;
     }
 

+ 6 - 6
Admin.NET/Admin.NET.Core/Service/OpenAccess/SysOpenAccessService.cs

@@ -36,7 +36,7 @@ public class SysOpenAccessService : IDynamicApiController, ITransient
     /// <param name="input"></param>
     /// <returns></returns>
     [DisplayName("获取生成的签名")]
-    public string GetGenerateSignature([FromQuery] GenerateSignatureInput input)
+    public static string GetGenerateSignature([FromQuery] GenerateSignatureInput input)
     {
         // 密钥
         var appSecretByte = Encoding.UTF8.GetBytes(input.AppSecret);
@@ -132,7 +132,7 @@ public class SysOpenAccessService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [DisplayName("创建密钥")]
-    public Task<string> CreateSecret()
+    public static Task<string> CreateSecret()
     {
         return Task.FromResult(Convert.ToBase64String(Guid.NewGuid().ToByteArray())[..^2]);
     }
@@ -166,22 +166,22 @@ public class SysOpenAccessService : IDynamicApiController, ITransient
         {
             OnGetAccessSecret = context =>
             {
-                var logger = context.HttpContext.RequestServices.GetService<ILogger<SysOpenAccessService>>();
+                var logger = context.HttpContext.RequestServices.GetRequiredService<ILogger<SysOpenAccessService>>();
                 try
                 {
-                    var openAccessService = context.HttpContext.RequestServices.GetService<SysOpenAccessService>();
+                    var openAccessService = context.HttpContext.RequestServices.GetRequiredService<SysOpenAccessService>();
                     var openAccess = openAccessService.GetByKey(context.AccessKey).GetAwaiter().GetResult();
                     return Task.FromResult(openAccess == null ? "" : openAccess.AccessSecret);
                 }
                 catch (Exception ex)
                 {
-                    logger.LogError(ex, ex.Message);
+                    logger.LogError(ex, "开发接口身份验证");
                     return Task.FromResult("");
                 }
             },
             OnValidated = context =>
             {
-                var openAccessService = context.HttpContext.RequestServices.GetService<SysOpenAccessService>();
+                var openAccessService = context.HttpContext.RequestServices.GetRequiredService<SysOpenAccessService>();
                 var openAccess = openAccessService.GetByKey(context.AccessKey).GetAwaiter().GetResult();
                 var identity = ((ClaimsIdentity)context.Principal!.Identity!);
 

+ 2 - 2
Admin.NET/Admin.NET.Core/Service/Region/SysRegionService.cs

@@ -16,8 +16,8 @@ public class SysRegionService : IDynamicApiController, ITransient
 {
     private readonly SqlSugarRepository<SysRegion> _sysRegionRep;
 
-    // Url地址-国家统计局行政区域2023年
-    private readonly string _url = "http://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/index.html";
+    //// Url地址-国家统计局行政区域2023年
+    //private readonly string _url = "http://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/index.html";
 
     public SysRegionService(SqlSugarRepository<SysRegion> sysRegionRep)
     {

+ 7 - 7
Admin.NET/Admin.NET.Core/Service/Server/SysServerService.cs

@@ -8,10 +8,10 @@
 
 using AngleSharp.Html.Parser;
 using AspNetCoreRateLimit;
+using Elastic.Clients.Elasticsearch;
 using Lazy.Captcha.Core;
 using Magicodes.ExporterAndImporter.Pdf;
 using MailKit.Net.Smtp;
-using Nest;
 using OnceMi.AspNetCore.OSS;
 
 namespace Admin.NET.Core.Service;
@@ -31,7 +31,7 @@ public class SysServerService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [DisplayName("获取服务器配置信息")]
-    public dynamic GetServerBase()
+    public static dynamic GetServerBase()
     {
         return new
         {
@@ -42,7 +42,7 @@ public class SysServerService : IDynamicApiController, ITransient
             SysRunTime = ComputerUtil.GetRunTime(), // 系统运行时间
             RemoteIp = ComputerUtil.GetIpFromOnline(), // 外网地址
             LocalIp = App.HttpContext?.Connection?.LocalIpAddress.ToString(), // 本地地址
-            FrameworkDescription = RuntimeInformation.FrameworkDescription, // NET框架
+            RuntimeInformation.FrameworkDescription, // NET框架
             Environment = App.HostEnvironment.IsDevelopment() ? "Development" : "Production",
             Wwwroot = App.WebHostEnvironment.WebRootPath, // 网站根目录
             Stage = App.HostEnvironment.IsStaging() ? "Stage环境" : "非Stage环境", // 是否Stage环境
@@ -54,7 +54,7 @@ public class SysServerService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [DisplayName("获取服务器使用信息")]
-    public dynamic GetServerUsed()
+    public static dynamic GetServerUsed()
     {
         var programStartTime = Process.GetCurrentProcess().StartTime;
         var totalMilliseconds = (DateTime.Now - programStartTime).TotalMilliseconds.ToString();
@@ -79,7 +79,7 @@ public class SysServerService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [DisplayName("获取服务器磁盘信息")]
-    public dynamic GetServerDisk()
+    public static dynamic GetServerDisk()
     {
         return ComputerUtil.GetDiskInfos();
     }
@@ -89,7 +89,7 @@ public class SysServerService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [DisplayName("获取框架主要程序集")]
-    public dynamic GetAssemblyList()
+    public static dynamic GetAssemblyList()
     {
         var furionAssembly = typeof(App).Assembly.GetName();
         var sqlSugarAssembly = typeof(ISqlSugarClient).Assembly.GetName();
@@ -103,7 +103,7 @@ public class SysServerService : IDynamicApiController, ITransient
         var wechatTenpayAssembly = typeof(WechatTenpayClient).Assembly.GetName();
         var ossAssembly = typeof(IOSSServiceFactory).Assembly.GetName();
         var parserAssembly = typeof(Parser).Assembly.GetName();
-        var nestAssembly = typeof(IElasticClient).Assembly.GetName();
+        var nestAssembly = typeof(ElasticsearchClient).Assembly.GetName();
         var limitAssembly = typeof(IpRateLimitMiddleware).Assembly.GetName();
         var htmlParserAssembly = typeof(HtmlParser).Assembly.GetName();
         var fluentEmailAssembly = typeof(SmtpClient).Assembly.GetName();

+ 22 - 21
Admin.NET/Admin.NET.Core/Util/ComputerUtil.cs

@@ -16,19 +16,18 @@ public static class ComputerUtil
     /// <returns></returns>
     public static MemoryMetrics GetComputerInfo()
     {
-        MemoryMetricsClient client = new();
         MemoryMetrics memoryMetrics;
         if (IsMacOS())
         {
-            memoryMetrics = client.GetMacOSMetrics();
+            memoryMetrics = MemoryMetricsClient.GetMacOSMetrics();
         }
         else if (IsUnix())
         {
-            memoryMetrics = client.GetUnixMetrics();
+            memoryMetrics = MemoryMetricsClient.GetUnixMetrics();
         }
         else
         {
-            memoryMetrics = client.GetWindowsMetrics();
+            memoryMetrics = MemoryMetricsClient.GetWindowsMetrics();
         }
         memoryMetrics.FreeRam = Math.Round(memoryMetrics.Free / 1024, 2) + "GB";
         memoryMetrics.UsedRam = Math.Round(memoryMetrics.Used / 1024, 2) + "GB";
@@ -319,7 +318,7 @@ public class MemoryMetricsClient
     /// windows系统获取内存信息
     /// </summary>
     /// <returns></returns>
-    public MemoryMetrics GetWindowsMetrics()
+    public static MemoryMetrics GetWindowsMetrics()
     {
         string output = ShellUtil.Cmd("wmic", "OS get FreePhysicalMemory,TotalVisibleMemorySize /Value");
         var metrics = new MemoryMetrics();
@@ -340,7 +339,7 @@ public class MemoryMetricsClient
     /// Unix系统获取
     /// </summary>
     /// <returns></returns>
-    public MemoryMetrics GetUnixMetrics()
+    public static MemoryMetrics GetUnixMetrics()
     {
         string output = ShellUtil.Bash("free -m | awk '{print $2,$3,$4,$5,$6}'");
         var metrics = new MemoryMetrics();
@@ -364,7 +363,7 @@ public class MemoryMetricsClient
     /// macOS系统获取
     /// </summary>
     /// <returns></returns>
-    public MemoryMetrics GetMacOSMetrics()
+    public static MemoryMetrics GetMacOSMetrics()
     {
         var metrics = new MemoryMetrics();
         //物理内存大小
@@ -413,14 +412,15 @@ public class ShellUtil
     /// <param name="args"></param>
     /// <returns></returns>
     public static string Cmd(string fileName, string args)
-    {
-        string output = string.Empty;
-
-        var info = new ProcessStartInfo();
-        info.FileName = fileName;
-        info.Arguments = args;
-        info.RedirectStandardOutput = true;
+    { 
+        var info = new ProcessStartInfo
+        {
+            FileName = fileName,
+            Arguments = args,
+            RedirectStandardOutput = true
+        };
 
+        var output = string.Empty;
         using (var process = Process.Start(info))
         {
             output = process.StandardOutput.ReadToEnd();
@@ -464,14 +464,15 @@ public class ShellHelper
     /// <param name="args"></param>
     /// <returns></returns>
     public static string Cmd(string fileName, string args)
-    {
-        string output = string.Empty;
-
-        var info = new ProcessStartInfo();
-        info.FileName = fileName;
-        info.Arguments = args;
-        info.RedirectStandardOutput = true;
+    { 
+        var info = new ProcessStartInfo
+        {
+            FileName = fileName,
+            Arguments = args,
+            RedirectStandardOutput = true
+        };
 
+        var output = string.Empty;
         using (var process = Process.Start(info))
         {
             output = process.StandardOutput.ReadToEnd();

+ 2 - 2
Admin.NET/Admin.NET.Web.Core/Handlers/JwtHandler.cs

@@ -39,7 +39,7 @@ namespace Admin.NET.Web.Core
             using var serviceScope = _serviceProvider.CreateScope();
 
             // 若当前账号存在黑名单中则授权失败
-            var sysCacheService = serviceScope.ServiceProvider.GetService<SysCacheService>();
+            var sysCacheService = serviceScope.ServiceProvider.GetRequiredService<SysCacheService>();
             if (sysCacheService.ExistKey($"{CacheConst.KeyBlacklist}{context.User.FindFirst(ClaimConst.UserId)?.Value}"))
             {
                 context.Fail();
@@ -47,7 +47,7 @@ namespace Admin.NET.Web.Core
                 return;
             }
 
-            var sysConfigService = serviceScope.ServiceProvider.GetService<SysConfigService>();
+            var sysConfigService = serviceScope.ServiceProvider.GetRequiredService<SysConfigService>();
             var tokenExpire = await sysConfigService.GetTokenExpire();
             var refreshTokenExpire = await sysConfigService.GetRefreshTokenExpire();
             if (JWTEncryption.AutoRefreshToken(context, context.GetCurrentHttpContext(), tokenExpire, refreshTokenExpire))

+ 1 - 1
Admin.NET/Admin.NET.Web.Core/Startup.cs

@@ -114,7 +114,7 @@ public class Startup : AppStartup
             //// 替换事件源存储器
             //options.ReplaceStorer(serviceProvider =>
             //{
-            //    var redisCache = serviceProvider.GetService<ICache>();
+            //    var redisCache = serviceProvider.GetRequiredService<ICache>();
             //    // 创建默认内存通道事件源对象,可自定义队列路由key,如:adminnet
             //    return new RedisEventSourceStorer(redisCache, "adminnet", 3000);
             //});

+ 1 - 7
Admin.NET/Plugins/Admin.NET.Plugin.GoView/Service/GoViewPro/GoViewProService.cs

@@ -17,18 +17,12 @@ public class GoViewProService : IDynamicApiController
 {
     private readonly SqlSugarRepository<GoViewPro> _goViewProRep;
     private readonly SqlSugarRepository<GoViewProData> _goViewProDataRep;
-    private readonly SqlSugarRepository<SysFile> _sysFileRep;
-    private readonly SysFileService _fileService;
 
     public GoViewProService(SqlSugarRepository<GoViewPro> goViewProjectRep,
-        SqlSugarRepository<GoViewProData> goViewProjectDataRep,
-        SqlSugarRepository<SysFile> fileRep,
-        SysFileService fileService)
+        SqlSugarRepository<GoViewProData> goViewProjectDataRep)
     {
         _goViewProRep = goViewProjectRep;
         _goViewProDataRep = goViewProjectDataRep;
-        _sysFileRep = fileRep;
-        _fileService = fileService;
     }
 
     /// <summary>

+ 1 - 1
Admin.NET/Plugins/Admin.NET.Plugin.GoView/Service/GoViewSys/GoViewSysService.cs

@@ -79,7 +79,7 @@ public class GoViewSysService : IDynamicApiController
     [AllowAnonymous]
     [ApiDescriptionSettings(Name = "GetOssInfo")]
     [DisplayName("获取 OSS 上传接口")]
-    public Task<GoViewOssUrlOutput> GetOssInfo()
+    public static Task<GoViewOssUrlOutput> GetOssInfo()
     {
         return Task.FromResult(new GoViewOssUrlOutput { BucketURL = "" });
     }