From 92438e908521729208f1b8903698245e13021d2b Mon Sep 17 00:00:00 2001 From: zuohuaijun Date: Fri, 18 Jul 2025 11:46:27 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=98=8E=E4=BC=98=E5=8C=96=E5=AD=97?= =?UTF-8?q?=E5=85=B8=E7=9B=B8=E5=85=B3=E6=9C=8D=E5=8A=A1=EF=BC=88=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E5=90=8E=E5=8F=B0=E8=BF=9E=E7=BB=AD=E8=B0=83=E7=94=A8?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E9=97=AE=E9=A2=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Dict/SysDictDataService.cs | 74 +++++++++++-------- .../Service/Dict/SysDictTypeService.cs | 2 +- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs b/Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs index 976ccb49..0a81647c 100644 --- a/Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Dict/SysDictDataService.cs @@ -15,7 +15,6 @@ public class SysDictDataService : IDynamicApiController, ITransient private readonly SqlSugarRepository _sysDictDataRep; private readonly SysCacheService _sysCacheService; private readonly UserManager _userManager; - public readonly ISugarQueryable VSysDictData; public SysDictDataService(SqlSugarRepository sysDictDataRep, SysCacheService sysCacheService, @@ -24,9 +23,6 @@ public class SysDictDataService : IDynamicApiController, ITransient _sysDictDataRep = sysDictDataRep; _sysCacheService = sysCacheService; _userManager = userManager; - VSysDictData = _sysDictDataRep.Context.UnionAll( - _sysDictDataRep.AsQueryable(), - _sysDictDataRep.Change().AsQueryable().Select()); } /// @@ -37,7 +33,7 @@ public class SysDictDataService : IDynamicApiController, ITransient [DisplayName("获取字典值分页列表")] public async Task> Page(PageDictDataInput input) { - return await VSysDictData + return await _sysDictDataRep.AsQueryable() .Where(u => u.DictTypeId == input.DictTypeId) .WhereIF(!string.IsNullOrEmpty(input.Code?.Trim()), u => u.Code.Contains(input.Code)) .WhereIF(!string.IsNullOrEmpty(input.Label?.Trim()), u => u.Label.Contains(input.Label)) @@ -64,7 +60,7 @@ public class SysDictDataService : IDynamicApiController, ITransient [DisplayName("增加字典值")] public async Task AddDictData(AddDictDataInput input) { - var isExist = await VSysDictData.AnyAsync(u => u.Code == input.Code && u.DictTypeId == input.DictTypeId); + var isExist = await _sysDictDataRep.IsAnyAsync(u => u.Code == input.Code && u.DictTypeId == input.DictTypeId); if (isExist) throw Oops.Oh(ErrorCodeEnum.D3003); var dictType = await _sysDictDataRep.Change().GetByIdAsync(input.DictTypeId); @@ -72,7 +68,7 @@ public class SysDictDataService : IDynamicApiController, ITransient _sysCacheService.Remove($"{CacheConst.KeyDict}{dictType.Code}"); - dynamic dictData = dictType.IsTenant == YesNoEnum.Y ? input.Adapt() : input.Adapt(); + var dictData = dictType.IsTenant == YesNoEnum.Y ? input.Adapt() : input.Adapt(); await _sysDictDataRep.Context.Insertable(dictData).ExecuteCommandAsync(); } @@ -86,17 +82,17 @@ public class SysDictDataService : IDynamicApiController, ITransient [DisplayName("更新字典值")] public async Task UpdateDictData(UpdateDictDataInput input) { - var isExist = await VSysDictData.AnyAsync(u => u.Id == input.Id); + var isExist = await _sysDictDataRep.IsAnyAsync(u => u.Id == input.Id); if (!isExist) throw Oops.Oh(ErrorCodeEnum.D3004); - isExist = await VSysDictData.AnyAsync(u => u.Code == input.Code && u.DictTypeId == input.DictTypeId && u.Id != input.Id); + isExist = await _sysDictDataRep.IsAnyAsync(u => u.Code == input.Code && u.DictTypeId == input.DictTypeId && u.Id != input.Id); if (isExist) throw Oops.Oh(ErrorCodeEnum.D3003); var dictType = await _sysDictDataRep.Change().GetByIdAsync(input.DictTypeId); if (dictType.SysFlag == YesNoEnum.Y && !_userManager.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D3009); _sysCacheService.Remove($"{CacheConst.KeyDict}{dictType.Code}"); - dynamic dictData = dictType.IsTenant == YesNoEnum.Y ? input.Adapt() : input.Adapt(); + var dictData = dictType.IsTenant == YesNoEnum.Y ? input.Adapt() : input.Adapt(); await _sysDictDataRep.Context.Updateable(dictData).ExecuteCommandAsync(); } @@ -110,13 +106,13 @@ public class SysDictDataService : IDynamicApiController, ITransient [DisplayName("删除字典值")] public async Task DeleteDictData(DeleteDictDataInput input) { - var dictData = await VSysDictData.FirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004); + var dictData = await _sysDictDataRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004); var dictType = await _sysDictDataRep.Change().GetByIdAsync(dictData.DictTypeId); if (dictType.SysFlag == YesNoEnum.Y && !_userManager.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D3010); _sysCacheService.Remove($"{CacheConst.KeyDict}{dictType.Code}"); - dynamic entity = dictType.IsTenant == YesNoEnum.Y ? input.Adapt() : input.Adapt(); + var entity = dictType.IsTenant == YesNoEnum.Y ? input.Adapt() : input.Adapt(); await _sysDictDataRep.Context.Deleteable(entity).ExecuteCommandAsync(); } @@ -128,7 +124,7 @@ public class SysDictDataService : IDynamicApiController, ITransient [DisplayName("获取字典值详情")] public async Task GetDetail([FromQuery] DictDataInput input) { - return (await VSysDictData.FirstAsync(u => u.Id == input.Id))?.Adapt(); + return await _sysDictDataRep.GetByIdAsync(input.Id); } /// @@ -140,7 +136,7 @@ public class SysDictDataService : IDynamicApiController, ITransient [DisplayName("修改字典值状态")] public async Task SetStatus(DictDataInput input) { - var dictData = await VSysDictData.FirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004); + var dictData = await _sysDictDataRep.GetByIdAsync(input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D3004); var dictType = await _sysDictDataRep.Change().GetByIdAsync(dictData.DictTypeId); if (dictType.SysFlag == YesNoEnum.Y && !_userManager.SuperAdmin) throw Oops.Oh(ErrorCodeEnum.D3009); @@ -148,7 +144,7 @@ public class SysDictDataService : IDynamicApiController, ITransient _sysCacheService.Remove($"{CacheConst.KeyDict}{dictType.Code}"); dictData.Status = input.Status; - dynamic entity = dictType.IsTenant == YesNoEnum.Y ? input.Adapt() : input.Adapt(); + var entity = dictType.IsTenant == YesNoEnum.Y ? input.Adapt() : input.Adapt(); await _sysDictDataRep.Context.Updateable(entity).ExecuteCommandAsync(); } @@ -187,26 +183,42 @@ public class SysDictDataService : IDynamicApiController, ITransient !string.IsNullOrWhiteSpace(code) && typeId != null) throw Oops.Oh(ErrorCodeEnum.D3011); - var dictType = await _sysDictDataRep.Change().AsQueryable() - .WhereIF(!string.IsNullOrWhiteSpace(code), u => u.Code == code) - .WhereIF(typeId != null, u => u.Id == typeId) - .FirstAsync(); - if (dictType == null) return null; - - var dictDataList = _sysCacheService.Get>($"{CacheConst.KeyDict}{dictType.Code}"); + var dictDataList = _sysCacheService.Get>($"{CacheConst.KeyDict}{code}"); if (dictDataList == null) { - dictDataList = await VSysDictData.InnerJoin((u, a) => u.DictTypeId == a.Id) - .Where(u => u.DictTypeId == dictType.Id) - .Select((u, a) => new SysDictData - { - Status = u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable ? StatusEnum.Enable : StatusEnum.Disable, - }, true) - .OrderBy(u => new { u.OrderNo, u.Code }) - .ToListAsync(); - _sysCacheService.Set($"{CacheConst.KeyDict}{dictType.Code}", dictDataList); + dictDataList = await _sysDictDataRep.Change().AsQueryable() + .LeftJoin((u, a) => u.Id == a.DictTypeId).ClearFilter() + .WhereIF(!string.IsNullOrWhiteSpace(code), u => u.Code == code) + .WhereIF(typeId != null && typeId > 0, u => u.Id == typeId) + .Where((u, a) => u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable) + .OrderBy((u, a) => new { a.OrderNo, a.Code }) + .Select((u, a) => a).ToListAsync(); + _sysCacheService.Set($"{CacheConst.KeyDict}{code}", dictDataList); } return dictDataList; + + //// 判断字典是否存在 + //var dictType = await _sysDictDataRep.Change().AsQueryable() + // .WhereIF(!string.IsNullOrWhiteSpace(code), u => u.Code == code) + // .WhereIF(typeId != null, u => u.Id == typeId) + // .FirstAsync(); + //if (dictType == null) return null; + + //var dictDataList = _sysCacheService.Get>($"{CacheConst.KeyDict}{dictType.Code}"); + //if (dictDataList == null) + //{ + // dictDataList = await _sysDictDataRep.AsQueryable() + // .InnerJoin((u, a) => u.DictTypeId == a.Id) + // .Where(u => u.DictTypeId == dictType.Id) + // .Select((u, a) => new SysDictData + // { + // Status = u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable ? StatusEnum.Enable : StatusEnum.Disable, + // }, true) + // .OrderBy(u => new { u.OrderNo, u.Code }) + // .ToListAsync(); + // _sysCacheService.Set($"{CacheConst.KeyDict}{dictType.Code}", dictDataList); + //} + //return dictDataList; } /// diff --git a/Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs b/Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs index 3f012bc1..ed840fb1 100644 --- a/Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Dict/SysDictTypeService.cs @@ -163,7 +163,7 @@ public class SysDictTypeService : IDynamicApiController, ITransient public async Task GetAllDictList() { var ds = await _sysDictTypeRep.AsQueryable() - .InnerJoin(_sysDictDataService.VSysDictData, (u, a) => u.Id == a.DictTypeId) + .InnerJoin((u, a) => u.Id == a.DictTypeId).ClearFilter() .Where((u, a) => u.Status == StatusEnum.Enable && a.Status == StatusEnum.Enable) .Select((u, a) => new { TypeCode = u.Code, a.Label, a.Value, a.Code, a.Remark, a.OrderNo, a.TagType, a.ExtData }) .ToListAsync();