Explorar o código

perf: 😀优化因App.GetService导致的性能问题

喵你个旺呀 hai 1 ano
pai
achega
85c8a26324

+ 3 - 5
Admin.NET/Admin.NET.Core/EventBus/AppEventSubscriber.cs

@@ -11,6 +11,7 @@ namespace Admin.NET.Core;
 /// </summary>
 public class AppEventSubscriber : IEventSubscriber, ISingleton, IDisposable
 {
+    private readonly static ISugarQueryable<SysTenant> SysTenantQueryable = App.GetService<ISqlSugarClient>().Queryable<SysTenant>();
     private readonly IServiceScope _serviceScope;
 
     public AppEventSubscriber(IServiceScopeFactory scopeFactory)
@@ -38,11 +39,8 @@ public class AppEventSubscriber : IEventSubscriber, ISingleton, IDisposable
     [EventSubscribe(CommonConst.SendErrorMail)]
     public async Task SendOrderErrorMail(EventHandlerExecutingContext context)
     {
-        //var mailTempPath = Path.Combine(App.WebHostEnvironment.WebRootPath, "Temp\\ErrorMail.tp");
-        //var mailTemp = File.ReadAllText(mailTempPath);
-        //var mail = await _serviceScope.ServiceProvider.GetRequiredService<IViewEngine>().RunCompileFromCachedAsync(mailTemp, );
-        var tenantId = App.GetService<UserManager>()?.TenantId ?? SqlSugarConst.DefaultTenantId;
-        var tenant = await App.GetService<ISqlSugarClient>().Queryable<SysTenant>().FirstAsync(t => t.Id == tenantId);
+        long.TryParse(App.HttpContext?.User.FindFirst(ClaimConst.TenantId)?.Value, out var tenantId);
+        var tenant = await SysTenantQueryable.FirstAsync(t => t.Id == tenantId);
         var title = $"{tenant?.Title} 系统异常";
         await _serviceScope.ServiceProvider.GetRequiredService<SysEmailService>().SendEmail(JSON.Serialize(context.Source.Payload), title);
     }

+ 5 - 3
Admin.NET/Admin.NET.Core/Service/Alipay/AlipayService.cs

@@ -21,6 +21,7 @@ namespace Admin.NET.Core.Service;
 [ApiDescriptionSettings(Order = 240)]
 public class AlipayService : IDynamicApiController, ITransient
 {
+    private readonly IEnumerable<IAlipayNotify> _alipayNotifyList;
     private readonly IWebHostEnvironment _webHostEnvironment;
     private readonly SysConfigService _sysConfigService;
     private readonly IHttpContextAccessor _httpContext;
@@ -30,8 +31,8 @@ public class AlipayService : IDynamicApiController, ITransient
 
     public AlipayService(
         UserManager userManager,
-        SysConfigService sysConfigService,
         IHttpContextAccessor httpContext,
+        SysConfigService sysConfigService,
         IWebHostEnvironment webHostEnvironment,
         IOptions<AlipayOptions> alipayOptions)
     {
@@ -40,6 +41,7 @@ public class AlipayService : IDynamicApiController, ITransient
         _sysConfigService = sysConfigService;
         _alipayOptions = alipayOptions.Value;
         _webHostEnvironment = webHostEnvironment;
+        _alipayNotifyList = App.GetServices<IAlipayNotify>();
 
         // 初始化支付宝客户端
         string path = App.WebHostEnvironment.ContentRootPath;
@@ -95,7 +97,7 @@ public class AlipayService : IDynamicApiController, ITransient
 
         // 循环执行扫码后需要执行的业务逻辑,需要至少一个继承方法返回true,否则抛出异常
         var pass = false;
-        foreach (var notify in App.GetServices<IAlipayNotify>())
+        foreach (var notify in _alipayNotifyList)
             if (notify.ScanCallback(type, userId, info)) pass = true;
         if (!pass) throw Oops.Oh("未处理的授权逻辑");
 
@@ -147,7 +149,7 @@ public class AlipayService : IDynamicApiController, ITransient
 
             // 循环执行业务逻辑,若都未处理(回调全部返回false)则交易失败
             var isError = true;
-            foreach (var notify in App.GetServices<IAlipayNotify>())
+            foreach (var notify in _alipayNotifyList)
                 if (notify.TopUpCallback(type, tradeNo)) isError = false;
             if (isError) throw Oops.Oh("交易失败");
         }

+ 14 - 10
Admin.NET/Admin.NET.Core/Service/Auth/SysAuthService.cs

@@ -22,26 +22,30 @@ public class SysAuthService : IDynamicApiController, ITransient
     private readonly SysMenuService _sysMenuService;
     private readonly SysOnlineUserService _sysOnlineUserService;
     private readonly SysConfigService _sysConfigService;
+    private readonly SysUserService _sysUserService;
     private readonly ICaptcha _captcha;
     private readonly SysCacheService _sysCacheService;
 
-    public SysAuthService(UserManager userManager,
+    public SysAuthService(
         SqlSugarRepository<SysUser> sysUserRep,
         IHttpContextAccessor httpContextAccessor,
-        SysMenuService sysMenuService,
         SysOnlineUserService sysOnlineUserService,
         SysConfigService sysConfigService,
-        ICaptcha captcha,
-        SysCacheService sysCacheService)
+        SysCacheService sysCacheService,
+        SysMenuService sysMenuService,
+        SysUserService sysUserService,
+        UserManager userManager,
+        ICaptcha captcha)
     {
-        _userManager = userManager;
+        _captcha = captcha;
         _sysUserRep = sysUserRep;
-        _httpContextAccessor = httpContextAccessor;
+        _userManager = userManager;
+        _sysUserService = sysUserService;
         _sysMenuService = sysMenuService;
-        _sysOnlineUserService = sysOnlineUserService;
-        _sysConfigService = sysConfigService;
-        _captcha = captcha;
         _sysCacheService = sysCacheService;
+        _sysConfigService = sysConfigService;
+        _httpContextAccessor = httpContextAccessor;
+        _sysOnlineUserService = sysOnlineUserService;
     }
 
     /// <summary>
@@ -379,7 +383,7 @@ public class SysAuthService : IDynamicApiController, ITransient
             RoleIdList = new List<long> { regWay.RoleId },
         };
         addUserInput.Copy(input);
-        await App.GetService<SysUserService>().RegisterUser(addUserInput);
+        await _sysUserService.RegisterUser(addUserInput);
     }
 
     /// <summary>

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

@@ -18,18 +18,21 @@ public class SysCodeGenService : IDynamicApiController, ITransient
 
     private readonly SysCodeGenConfigService _codeGenConfigService;
     private readonly CodeGenOptions _codeGenOptions;
+    private readonly SysMenuService _sysMenuService;
     private readonly IViewEngine _viewEngine;
     private readonly UserManager _userManager;
 
     public SysCodeGenService(ISqlSugarClient db,
         SysCodeGenConfigService codeGenConfigService,
         IOptions<CodeGenOptions> codeGenOptions,
+        SysMenuService sysMenuService,
         UserManager userManager,
         IViewEngine viewEngine)
     {
         _db = db;
         _viewEngine = viewEngine;
         _userManager = userManager;
+        _sysMenuService = sysMenuService;
         _codeGenOptions = codeGenOptions.Value;
         _codeGenConfigService = codeGenConfigService;
     }
@@ -471,8 +474,6 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     /// <returns></returns>
     private async Task AddMenu(string className, string busName, long pid, string menuIcon, string pagePath, List<CodeGenConfig> tableFieldList)
     {
-        var service = App.GetService<SysMenuService>();
-
         // 删除已存在的菜单
         var title = $"{busName}管理";
         await DeleteMenuTree(title, pid == 0 ? MenuTypeEnum.Dir : MenuTypeEnum.Menu);
@@ -483,7 +484,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         {
             // 新增目录,并记录Id
             var dirMenu = new SysMenu { Pid = 0, Title = title, Type = MenuTypeEnum.Dir, Icon = "robot", Path = "/" + className.ToLower(), Component = "Layout" };
-            pid = await service.AddMenu(dirMenu.Adapt<AddMenuInput>());
+            pid = await _sysMenuService.AddMenu(dirMenu.Adapt<AddMenuInput>());
         }
         else
         {
@@ -493,7 +494,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
 
         // 新增菜单,并记录Id
         var rootMenu = new SysMenu { Pid = pid, Title = title, Type = MenuTypeEnum.Menu, Icon = menuIcon, Path = $"{parentMenuPath}/{className.ToLower()}", Component = $"/{pagePath}/{lowerClassName}/index" };
-        pid = await service.AddMenu(rootMenu.Adapt<AddMenuInput>());
+        pid = await _sysMenuService.AddMenu(rootMenu.Adapt<AddMenuInput>());
 
         var orderNo = 100;
         var menuList = new List<SysMenu>
@@ -516,7 +517,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
         foreach (var column in tableFieldList.Where(u => u.EffectType == "Upload"))
             menuList.Add(new SysMenu { Title = $"上传{column.ColumnComment}", Permission = $"{lowerClassName}:upload{column.PropertyName}", Pid = pid, Type = MenuTypeEnum.Btn, OrderNo = orderNo += 10 });
 
-        foreach (var menu in menuList) await service.AddMenu(menu.Adapt<AddMenuInput>());
+        foreach (var menu in menuList) await _sysMenuService.AddMenu(menu.Adapt<AddMenuInput>());
     }
 
     /// <summary>
@@ -527,7 +528,7 @@ public class SysCodeGenService : IDynamicApiController, ITransient
     private async Task DeleteMenuTree(string title, MenuTypeEnum type)
     {
         var menuList = await _db.Queryable<SysMenu>().Where(u => u.Title == title && u.Type == type).ToListAsync() ?? new();
-        foreach (var menu in menuList) await App.GetService<SysMenuService>().DeleteMenu(new DeleteMenuInput { Id = menu.Id });
+        foreach (var menu in menuList) await _sysMenuService.DeleteMenu(new DeleteMenuInput { Id = menu.Id });
     }
 
     /// <summary>

+ 12 - 7
Admin.NET/Admin.NET.Core/Service/Config/SysConfigService.cs

@@ -14,14 +14,19 @@ namespace Admin.NET.Core.Service;
 [ApiDescriptionSettings(Order = 440)]
 public class SysConfigService : IDynamicApiController, ITransient
 {
-    private readonly SysCacheService _sysCacheService;
+    private static readonly SysTenantService SysTenantService = App.GetService<SysTenantService>();
     private readonly SqlSugarRepository<SysConfig> _sysConfigRep;
+    private readonly SqlSugarRepository<SysTenant> _sysTenantRep;
+    private readonly SysCacheService _sysCacheService;
 
-    public SysConfigService(SysCacheService sysCacheService,
-        SqlSugarRepository<SysConfig> sysConfigRep)
+    public SysConfigService(
+        SqlSugarRepository<SysTenant> sysTenantRep,
+        SqlSugarRepository<SysConfig> sysConfigRep,
+        SysCacheService sysCacheService)
     {
         _sysCacheService = sysCacheService;
         _sysConfigRep = sysConfigRep;
+        _sysTenantRep = sysTenantRep;
     }
 
     /// <summary>
@@ -242,8 +247,8 @@ public class SysConfigService : IDynamicApiController, ITransient
     [DisplayName("获取系统信息")]
     public async Task<dynamic> GetSysInfo()
     {
-        var tenant = await App.GetService<SysTenantService>().GetCurrentTenant();
-        tenant ??= await _sysConfigRep.Context.Queryable<SysTenant>().FirstAsync(u => u.Id == SqlSugarConst.DefaultTenantId);
+        var tenant = await SysTenantService.GetCurrentTenant();
+        tenant ??= await _sysTenantRep.GetFirstAsync(u => u.Id == SqlSugarConst.DefaultTenantId);
         _ = tenant ?? throw Oops.Oh(ErrorCodeEnum.D1002);
 
         var wayList = await _sysConfigRep.Context.Queryable<SysUserRegWay>().ClearFilter()
@@ -281,8 +286,8 @@ public class SysConfigService : IDynamicApiController, ITransient
     [DisplayName("保存系统信息")]
     public async Task SaveSysInfo(InfoSaveInput input)
     {
-        var tenant = await App.GetService<SysTenantService>().GetCurrentTenant() ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-        if (!string.IsNullOrEmpty(input.LogoBase64)) App.GetService<SysTenantService>().SetLogoUrl(tenant, input.LogoBase64, input.LogoFileName);
+        var tenant = await SysTenantService.GetCurrentTenant() ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        if (!string.IsNullOrEmpty(input.LogoBase64)) SysTenantService.SetLogoUrl(tenant, input.LogoBase64, input.LogoFileName);
         // await UpdateConfigValue(ConfigConst.SysCaptcha, (input.Captcha == YesNoEnum.Y).ToString());
         // await UpdateConfigValue(ConfigConst.SysSecondVer, (input.SecondVer == YesNoEnum.Y).ToString());
 

+ 6 - 4
Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs

@@ -12,17 +12,19 @@ namespace Admin.NET.Core.Service;
 [ApiDescriptionSettings(Order = 420)]
 public class SysDictDataService : IDynamicApiController, ITransient
 {
+    private static readonly SysDictTypeService SysDictTypeService = App.GetService<SysDictTypeService>();
     private readonly SqlSugarRepository<SysDictData> _sysDictDataRep;
     private readonly SysCacheService _sysCacheService;
     private readonly UserManager _userManager;
 
-    public SysDictDataService(SqlSugarRepository<SysDictData> sysDictDataRep,
+    public SysDictDataService(
+        SqlSugarRepository<SysDictData> sysDictDataRep,
         SysCacheService sysCacheService,
         UserManager userManager)
     {
+        _userManager = userManager;
         _sysDictDataRep = sysDictDataRep;
         _sysCacheService = sysCacheService;
-        _userManager = userManager;
     }
 
     /// <summary>
@@ -148,7 +150,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
     [NonAction]
     public async Task<List<SysDictData>> GetDictDataListByDictTypeId(long dictTypeId)
     {
-        var dictType = await App.GetService<SysDictTypeService>().GetDetail(new DictTypeInput { Id = dictTypeId });
+        var dictType = await SysDictTypeService.GetDetail(new DictTypeInput { Id = dictTypeId });
         var dictDataList = _sysCacheService.Get<List<SysDictData>>($"{CacheConst.KeyDict}{dictTypeId}");
 
         if (dictDataList == null)
@@ -205,7 +207,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
     /// </summary>
     /// <returns></returns>
     [NonAction]
-    public List<long> GetTenantIdList() => App.GetService<SysDictTypeService>().GetTenantIdList();
+    public List<long> GetTenantIdList() => SysDictTypeService.GetTenantIdList();
 
     /// <summary>
     /// 获取SysDictData表查询实例

+ 1 - 1
Admin.NET/Admin.NET.Core/Service/Menu/SysMenuService.cs

@@ -318,7 +318,7 @@ public class SysMenuService : IDynamicApiController, ITransient
     public async Task<List<long>> ExcludeParentMenuOfFullySelected(List<long> menuIds)
     {
         // 获取当前用户菜单
-        var (query, _) = App.GetService<SysMenuService>().GetSugarQueryableAndTenantId(0);
+        var (query, _) = GetSugarQueryableAndTenantId(0);
         var menuList = await query.ToListAsync();
 
         // 排除列表,防止前端全选问题

+ 9 - 6
Admin.NET/Admin.NET.Core/Service/Role/SysRoleService.cs

@@ -14,23 +14,26 @@ public class SysRoleService : IDynamicApiController, ITransient
 {
     private readonly UserManager _userManager;
     private readonly SqlSugarRepository<SysRole> _sysRoleRep;
-    private readonly SysRoleOrgService _sysRoleOrgService;
     private readonly SysRoleMenuService _sysRoleMenuService;
-    private readonly SysOrgService _sysOrgService;
     private readonly SysUserRoleService _sysUserRoleService;
+    private readonly SysRoleOrgService _sysRoleOrgService;
+    private readonly SysMenuService _sysMenuService;
+    private readonly SysOrgService _sysOrgService;
 
     public SysRoleService(UserManager userManager,
-        SqlSugarRepository<SysRole> sysRoleRep,
+        SysOrgService sysOrgService,
+        SysMenuService sysMenuService,
         SysRoleOrgService sysRoleOrgService,
+        SqlSugarRepository<SysRole> sysRoleRep,
         SysRoleMenuService sysRoleMenuService,
-        SysOrgService sysOrgService,
         SysUserRoleService sysUserRoleService)
     {
         _userManager = userManager;
         _sysRoleRep = sysRoleRep;
+        _sysOrgService = sysOrgService;
+        _sysMenuService = sysMenuService;
         _sysRoleOrgService = sysRoleOrgService;
         _sysRoleMenuService = sysRoleMenuService;
-        _sysOrgService = sysOrgService;
         _sysUserRoleService = sysUserRoleService;
     }
 
@@ -219,7 +222,7 @@ public class SysRoleService : IDynamicApiController, ITransient
     public async Task<List<long>> GetOwnMenuList([FromQuery] RoleInput input)
     {
         var menuIds = await _sysRoleMenuService.GetRoleMenuIdList(new List<long> { input.Id });
-        return await App.GetService<SysMenuService>().ExcludeParentMenuOfFullySelected(menuIds);
+        return await _sysMenuService.ExcludeParentMenuOfFullySelected(menuIds);
     }
 
     /// <summary>

+ 23 - 23
Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs

@@ -12,48 +12,49 @@ namespace Admin.NET.Core.Service;
 [ApiDescriptionSettings(Order = 390)]
 public class SysTenantService : IDynamicApiController, ITransient
 {
-    private readonly SqlSugarRepository<SysTenant> _sysTenantRep;
-    private readonly SqlSugarRepository<SysOrg> _sysOrgRep;
-    private readonly SqlSugarRepository<SysRole> _sysRoleRep;
-    private readonly SqlSugarRepository<SysPos> _sysPosRep;
-    private readonly SqlSugarRepository<SysUser> _sysUserRep;
+    private static readonly SysMenuService SysMenuService = App.GetService<SysMenuService>();
     private readonly SqlSugarRepository<SysUserExtOrg> _sysUserExtOrgRep;
     private readonly SqlSugarRepository<SysTenantMenu> _sysTenantMenuRep;
     private readonly SqlSugarRepository<SysRoleMenu> _sysRoleMenuRep;
-    private readonly SysRoleMenuService _sysRoleMenuService;
     private readonly SqlSugarRepository<SysUserRole> _userRoleRep;
+    private readonly SqlSugarRepository<SysTenant> _sysTenantRep;
+    private readonly SqlSugarRepository<SysRole> _sysRoleRep;
+    private readonly SqlSugarRepository<SysUser> _sysUserRep;
+    private readonly SqlSugarRepository<SysOrg> _sysOrgRep;
+    private readonly SqlSugarRepository<SysPos> _sysPosRep;
+    private readonly SysRoleMenuService _sysRoleMenuService;
     private readonly SysConfigService _sysConfigService;
     private readonly SysCacheService _sysCacheService;
     private readonly UploadOptions _uploadOptions;
 
-    public SysTenantService(SqlSugarRepository<SysTenant> sysTenantRep,
-        SqlSugarRepository<SysOrg> sysOrgRep,
-        SqlSugarRepository<SysRole> sysRoleRep,
-        SqlSugarRepository<SysPos> sysPosRep,
-        SqlSugarRepository<SysUser> sysUserRep,
+    public SysTenantService(
         SqlSugarRepository<SysUserExtOrg> sysUserExtOrgRep,
         SqlSugarRepository<SysTenantMenu> sysTenantMenuRep,
         SqlSugarRepository<SysRoleMenu> sysRoleMenuRep,
         SqlSugarRepository<SysUserRole> userRoleRep,
+        SqlSugarRepository<SysTenant> sysTenantRep,
+        SqlSugarRepository<SysUser> sysUserRep,
+        SqlSugarRepository<SysRole> sysRoleRep,
+        SqlSugarRepository<SysOrg> sysOrgRep,
+        SqlSugarRepository<SysPos> sysPosRep,
         IOptions<UploadOptions> uploadOptions,
+        SysRoleMenuService sysRoleMenuService,
         SysConfigService sysConfigService,
-        SysCacheService sysCacheService,
-        SysRoleMenuService sysRoleMenuService)
+        SysCacheService sysCacheService)
     {
         _sysTenantRep = sysTenantRep;
         _sysOrgRep = sysOrgRep;
         _sysRoleRep = sysRoleRep;
         _sysPosRep = sysPosRep;
         _sysUserRep = sysUserRep;
-        _sysTenantMenuRep = sysTenantMenuRep;
-        _sysUserExtOrgRep = sysUserExtOrgRep;
-        _sysRoleMenuRep = sysRoleMenuRep;
         _userRoleRep = userRoleRep;
+        _sysRoleMenuRep = sysRoleMenuRep;
+        _sysCacheService = sysCacheService;
         _uploadOptions = uploadOptions.Value;
         _sysConfigService = sysConfigService;
-        _sysCacheService = sysCacheService;
+        _sysTenantMenuRep = sysTenantMenuRep;
+        _sysUserExtOrgRep = sysUserExtOrgRep;
         _sysRoleMenuService = sysRoleMenuService;
-
     }
 
     /// <summary>
@@ -513,7 +514,7 @@ public class SysTenantService : IDynamicApiController, ITransient
         await _sysTenantMenuRep.InsertRangeAsync(sysTenantMenuList);
 
         // 清除菜单权限缓存
-        App.GetService<SysMenuService>().DeleteMenuCache();
+        SysMenuService.DeleteMenuCache();
     }
 
     /// <summary>
@@ -525,7 +526,7 @@ public class SysTenantService : IDynamicApiController, ITransient
     public async Task<List<long>> GetTenantMenuList([FromQuery] BaseIdInput input)
     {
         var menuIds = await _sysTenantMenuRep.AsQueryable().Where(u => u.TenantId == input.Id).Select(u => u.MenuId).ToListAsync();
-        return await App.GetService<SysMenuService>().ExcludeParentMenuOfFullySelected(menuIds);
+        return await SysMenuService.ExcludeParentMenuOfFullySelected(menuIds);
     }
 
     /// <summary>
@@ -551,10 +552,9 @@ public class SysTenantService : IDynamicApiController, ITransient
     [DisplayName("切换租户")]
     public async Task<LoginOutput> ChangeTenant(BaseIdInput input)
     {
-        var userManager = App.GetService<UserManager>();
-
+        var userId = (App.HttpContext?.User.FindFirst(ClaimConst.UserId)?.Value)?.ToLong();
         _ = await _sysTenantRep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
-        var user = await _sysUserRep.GetFirstAsync(u => u.Id == userManager.UserId) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
+        var user = await _sysUserRep.GetFirstAsync(u => u.Id == userId) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
         user.TenantId = input.Id;
 
         return await GetAccessTokenInNotSingleLogin(user);

+ 4 - 4
Admin.NET/Admin.NET.Core/SqlSugar/SqlSugarFilter.cs

@@ -50,10 +50,10 @@ public static class SqlSugarFilter
     {
         // 若仅本人数据,则直接返回
         var maxDataScope = SetDataScopeFilter(db);
-        if (maxDataScope == 0 || maxDataScope == (int)DataScopeEnum.Self) return;
+        if (maxDataScope is 0 or (int)DataScopeEnum.Self) return;
 
-        var userId = App.GetService<UserManager>()?.UserId;
-        if (userId == null) return;
+        long.TryParse(App.HttpContext?.User.FindFirst(ClaimConst.UserId)?.Value, out var userId);
+        if (userId <= 0) return;
 
         // 配置用户机构集合缓存
         var cacheKey = $"db:{db.CurrentConnectionConfig.ConfigId}:orgList:{userId}";
@@ -108,7 +108,7 @@ public static class SqlSugarFilter
     {
         var maxDataScope = (int)DataScopeEnum.All;
 
-        var userId = App.GetService<UserManager>().UserId;
+        long.TryParse(App.HttpContext?.User.FindFirst(ClaimConst.UserId)?.Value, out var userId);
         if (userId <= 0) return maxDataScope;
 
         // 获取用户最大数据范围---仅本人数据

+ 2 - 1
Admin.NET/Admin.NET.Core/Utils/ExcelHelper.cs

@@ -88,6 +88,7 @@ public class ExcelHelper
         using var package = new ExcelPackage((ExportData(list, filename) as XlsxFileResult)!.Stream);
         var worksheet = package.Workbook.Worksheets[0];
 
+        var sysDictTypeService = App.GetService<SysDictTypeService>();
         foreach (var prop in typeof(T).GetProperties())
         {
             var propType = prop.PropertyType;
@@ -116,7 +117,7 @@ public class ExcelHelper
                     var dict = prop.GetCustomAttribute<DictAttribute>();
                     if (dict != null)
                     {// 填充字典值value为下列列表
-                        dataList = App.GetService<SysDictTypeService>().GetDataList(new GetDataDictTypeInput
+                        dataList = sysDictTypeService.GetDataList(new GetDataDictTypeInput
                         { Code = dict.DictTypeCode }).Result?.Select(x => x.Label).ToList();
                     }
                 }