Kaynağa Gözat

refactor: 😀优化字典服务,恢复移除缓存方法;

Ir0nMax 1 yıl önce
ebeveyn
işleme
7bbfeb4fa3

+ 3 - 3
Admin.NET/Admin.NET.Core/Attribute/DictAttribute.cs

@@ -69,11 +69,11 @@ public class DictAttribute : ValidationAttribute, ITransient
         }
 
         // 先尝试从 ValidationContext 的依赖注入容器中拿服务,拿不到或类型不匹配时,再从全局的 App 容器中获取
-        if (validationContext.GetService(typeof(SysDictTypeService)) is not SysDictTypeService sysDictDataService)
-            sysDictDataService = App.GetRequiredService<SysDictTypeService>();
+        if (validationContext.GetService(typeof(SysDictDataService)) is not SysDictDataService sysDictDataService)
+            sysDictDataService = App.GetRequiredService<SysDictDataService>();
 
         // 获取字典值列表
-        var dictDataList = sysDictDataService.GetDataList(new GetDataDictTypeInput { Code = DictTypeCode}).GetAwaiter().GetResult();
+        var dictDataList = sysDictDataService.GetDataList(DictTypeCode).GetAwaiter().GetResult();
 
         // 使用 HashSet 来提高查找效率
         var dictHash = new HashSet<string>(dictDataList.Select(u => u.Value));

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

@@ -12,7 +12,6 @@ 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;
@@ -68,7 +67,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
         if (dictType.SysFlag == YesNoEnum.Y && !_userManager.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D3010);
 
         var dictTypeCode = await _sysDictDataRep.AsQueryable().Where(u => u.DictTypeId == input.DictTypeId).Select(u => u.DictType.Code).FirstAsync();
-        _sysCacheService.RemoveByPrefixKey($"{CacheConst.KeyDict}{dictTypeCode}");
+        _sysCacheService.Remove($"{CacheConst.KeyDict}{dictTypeCode}");
 
         await _sysDictDataRep.InsertAsync(input.Adapt<SysDictData>());
     }
@@ -93,7 +92,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
         if (dictType.SysFlag == YesNoEnum.Y && !_userManager.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D3010);
 
         var dictTypeCode = await _sysDictDataRep.AsQueryable().Where(u => u.DictTypeId == input.DictTypeId).Select(u => u.DictType.Code).FirstAsync();
-        _sysCacheService.RemoveByPrefixKey($"{CacheConst.KeyDict}{dictTypeCode}");
+        _sysCacheService.Remove($"{CacheConst.KeyDict}{dictTypeCode}");
 
         await _sysDictDataRep.UpdateAsync(input.Adapt<SysDictData>());
     }
@@ -111,7 +110,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
         var dictData = await _sysDictDataRep.AsQueryable().FirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004);
 
         var dictTypeCode = await _sysDictDataRep.AsQueryable().Where(u => u.DictTypeId == dictData.Id).Select(u => u.DictType.Code).FirstAsync();
-        _sysCacheService.RemoveByPrefixKey($"{CacheConst.KeyDict}{dictTypeCode}");
+        _sysCacheService.Remove($"{CacheConst.KeyDict}{dictTypeCode}");
 
         var dictType = await _sysDictDataRep.Change<SysDictType>().GetByIdAsync(dictData.DictTypeId);
         if (dictType.SysFlag == YesNoEnum.Y && !_userManager.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D3010);
@@ -142,7 +141,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
         var dictData = await _sysDictDataRep.AsQueryable().FirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004);
 
         var dictTypeCode = await _sysDictDataRep.AsQueryable().ClearFilter().Where(u => u.DictTypeId == dictData.Id).Select(u => u.DictType.Code).FirstAsync();
-        _sysCacheService.RemoveByPrefixKey($"{CacheConst.KeyDict}{dictTypeCode}");
+        _sysCacheService.Remove($"{CacheConst.KeyDict}{dictTypeCode}");
 
         dictData.Status = input.Status;
         await _sysDictDataRep.AsUpdateable(dictData).UpdateColumns(u => new { u.Status }, true).ExecuteCommandAsync();
@@ -160,7 +159,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
         var dictDataList = _sysCacheService.Get<List<SysDictData>>(cacheKey);
         if (dictDataList != null) return dictDataList;
 
-        dictDataList = await _sysDictDataRep.AsQueryable().Includes(u => u.DictType).Where(u => u.DictType.Code == code).ToListAsync();
+        dictDataList = await _sysDictDataRep.AsQueryable().Where(u => u.DictType.Code == code && u.Status == StatusEnum.Enable && u.DictType.Status == StatusEnum.Enable).ToListAsync();
         _sysCacheService.Set(cacheKey, dictDataList);
         return dictDataList;
     }
@@ -189,7 +188,7 @@ public class SysDictDataService : IDynamicApiController, ITransient
     public async Task DeleteDictData(long dictTypeId)
     {
         var dictTypeCode = await _sysDictDataRep.AsQueryable().Where(u => u.DictTypeId == dictTypeId).Select(u => u.DictType.Code).FirstAsync();
-        _sysCacheService.RemoveByPrefixKey($"{CacheConst.KeyDict}{dictTypeCode}");
+        _sysCacheService.Remove($"{CacheConst.KeyDict}{dictTypeCode}");
         await _sysDictDataRep.DeleteAsync(u => u.DictTypeId == dictTypeId);
     }
 }

+ 2 - 3
Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs

@@ -58,7 +58,6 @@ public class SysDictTypeService : IDynamicApiController, ITransient
     /// </summary>
     /// <param name="input"></param>
     /// <returns></returns>
-    [UnitOfWork]
     [DisplayName("获取字典类型-值列表")]
     public async Task<List<SysDictData>> GetDataList([FromQuery] GetDataDictTypeInput input)
     {
@@ -108,7 +107,7 @@ public class SysDictTypeService : IDynamicApiController, ITransient
         var isExist = await _sysDictTypeRep.IsAnyAsync(u => u.Code == input.Code && u.Id != input.Id);
         if (isExist) throw Oops.Oh(ErrorCodeEnum.D3001);
 
-        _sysCacheService.RemoveByPrefixKey($"{CacheConst.KeyDict}{input.Code}");
+        _sysCacheService.Remove($"{CacheConst.KeyDict}{input.Code}");
         await _sysDictTypeRep.UpdateAsync(input.Adapt<SysDictType>());
     }
 
@@ -152,7 +151,7 @@ public class SysDictTypeService : IDynamicApiController, ITransient
     {
         var dictType = await _sysDictTypeRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3000);
 
-        _sysCacheService.RemoveByPrefixKey($"{CacheConst.KeyDict}{dictType.Code}");
+        _sysCacheService.Remove($"{CacheConst.KeyDict}{dictType.Code}");
 
         dictType.Status = input.Status;
         await _sysDictTypeRep.AsUpdateable(dictType).UpdateColumns(u => new { u.Status }, true).ExecuteCommandAsync();