From 90d403c9cac05a9a4cd89885381b915b0def058b Mon Sep 17 00:00:00 2001 From: zhangqi <2794379662@qq.com> Date: Wed, 28 Apr 2021 13:42:36 +0800 Subject: [PATCH] =?UTF-8?q?update:=E5=8C=BA=E5=9F=9F=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=BC=93=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Api/Ewide.Core/Const/CommonConst.cs | 4 ++ .../Controller/AreaNumberController.cs | 2 +- Api/Ewide.Core/Ewide.Core.xml | 5 +++ .../Service/Area/AreaNumberService.cs | 38 +++++++++++++++---- .../Service/Cache/ISysCacheService.cs | 5 ++- .../Service/Cache/SysCacheService.cs | 12 +++++- 6 files changed, 55 insertions(+), 11 deletions(-) diff --git a/Api/Ewide.Core/Const/CommonConst.cs b/Api/Ewide.Core/Const/CommonConst.cs index 46315f3..418ad6e 100644 --- a/Api/Ewide.Core/Const/CommonConst.cs +++ b/Api/Ewide.Core/Const/CommonConst.cs @@ -31,5 +31,9 @@ /// 验证码缓存 /// public const string CACHE_KEY_CODE = "vercode_"; + /// + /// 区域缓存 + /// + public const string CACHE_AREA_NUMBER = "areaNumber"; } } diff --git a/Api/Ewide.Core/Controller/AreaNumberController.cs b/Api/Ewide.Core/Controller/AreaNumberController.cs index c9b4ded..048f5f6 100644 --- a/Api/Ewide.Core/Controller/AreaNumberController.cs +++ b/Api/Ewide.Core/Controller/AreaNumberController.cs @@ -51,7 +51,7 @@ namespace Ewide.Core.Controller [HttpPost("/area/edit")] public async Task UpdateAreaNumber(AreaNumberInput input) { - await _areaNumberService.AddAreaNumber(input); + await _areaNumberService.UpdateAreaNumber(input); } /// /// 删除区域 diff --git a/Api/Ewide.Core/Ewide.Core.xml b/Api/Ewide.Core/Ewide.Core.xml index 1b0ada5..c55c698 100644 --- a/Api/Ewide.Core/Ewide.Core.xml +++ b/Api/Ewide.Core/Ewide.Core.xml @@ -303,6 +303,11 @@ 验证码缓存 + + + 区域缓存 + + 区域代码相关服务 diff --git a/Api/Ewide.Core/Service/Area/AreaNumberService.cs b/Api/Ewide.Core/Service/Area/AreaNumberService.cs index 74ea229..924ca08 100644 --- a/Api/Ewide.Core/Service/Area/AreaNumberService.cs +++ b/Api/Ewide.Core/Service/Area/AreaNumberService.cs @@ -19,12 +19,14 @@ namespace Ewide.Core.Service.Area public class AreaNumberService : IAreaNumberService, ITransient { private readonly IRepository _areaNumberRep; + private readonly IRepository _sysOrgRep; private readonly ISysCacheService _sysCacheService; - public AreaNumberService(IRepository areaNumberRep, ISysCacheService sysCacheService) + public AreaNumberService(IRepository areaNumberRep, ISysCacheService sysCacheService, IRepository sysOrgRep) { _areaNumberRep = areaNumberRep; _sysCacheService = sysCacheService; + _sysOrgRep = sysOrgRep; } /// /// 添加一个区域 @@ -33,7 +35,9 @@ namespace Ewide.Core.Service.Area /// public async Task AddAreaNumber(AreaNumberInput input) { - await _areaNumberRep.InsertAsync(input.Adapt()); + CheckInput(input); + await _areaNumberRep.InsertNowAsync(input.Adapt()); + await _sysCacheService.SetAreaNumber(await _areaNumberRep.DetachedEntities.ToListAsync()); } /// /// 删除一个区域 @@ -43,7 +47,12 @@ namespace Ewide.Core.Service.Area public async Task DeleteAreaNumber(DeleteAreaNumberInput input) { var areaNumber = await _areaNumberRep.FirstOrDefaultAsync(p => p.Code == input.Code); - await areaNumber.DeleteAsync(); + if (await _sysOrgRep.DetachedEntities.AnyAsync(o => o.AreaNumberCode == input.Code)) + { + throw Oops.Oh("不能删除已包含区域的组织"); + } + await areaNumber.DeleteNowAsync(); + await _sysCacheService.SetAreaNumber(await _areaNumberRep.DetachedEntities.ToListAsync()); } /// /// 根据区域代码获取区域信息 @@ -52,7 +61,13 @@ namespace Ewide.Core.Service.Area /// public async Task GetAreaNumber(string code) { - return await _areaNumberRep.DetachedEntities.FirstOrDefaultAsync(a => a.Code == code); + var cachedAreaNumbers = await _sysCacheService.GetAreaNumber(); + if (cachedAreaNumbers == null || cachedAreaNumbers.Count < 0) + { + cachedAreaNumbers = await _areaNumberRep.DetachedEntities.ToListAsync(); + await _sysCacheService.SetAreaNumber(cachedAreaNumbers); + } + return cachedAreaNumbers.FirstOrDefault(a => a.Code == code); } /// /// 获取区域目录树 @@ -60,14 +75,20 @@ namespace Ewide.Core.Service.Area /// public async Task> GetAreaNumberTree() { - return new TreeBuildUtil().DoTreeBuild(await _areaNumberRep.DetachedEntities.Select(u => new AreaTreeNode + var cachedAreaNumbers = await _sysCacheService.GetAreaNumber(); + if (cachedAreaNumbers == null || cachedAreaNumbers.Count < 0) + { + cachedAreaNumbers = await _areaNumberRep.DetachedEntities.ToListAsync(); + await _sysCacheService.SetAreaNumber(cachedAreaNumbers); + } + return new TreeBuildUtil().DoTreeBuild(cachedAreaNumbers.Select(u => new AreaTreeNode { Code = u.Code, ParentCode = u.ParentCode, Name = u.Name, LevelType = u.LevelType, Note = u.Note - }).ToListAsync()); + }).ToList()); } public async Task> GetAreaNumberWithChildren(string code) @@ -83,14 +104,15 @@ namespace Ewide.Core.Service.Area { CheckInput(input); var area = input.Adapt(); - await area.UpdateAsync(); + await area.UpdateNowAsync(); + await _sysCacheService.SetAreaNumber(await _areaNumberRep.DetachedEntities.ToListAsync()); } private bool CheckInput(AreaNumberInput input) { //检查level和区域长度 if (false) { - Oops.Oh("数据异常"); + throw Oops.Oh("数据异常"); } //检查是否有子节点 return true; diff --git a/Api/Ewide.Core/Service/Cache/ISysCacheService.cs b/Api/Ewide.Core/Service/Cache/ISysCacheService.cs index 0e66aeb..62ac0f0 100644 --- a/Api/Ewide.Core/Service/Cache/ISysCacheService.cs +++ b/Api/Ewide.Core/Service/Cache/ISysCacheService.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using Ewide.Core.Entity; +using System.Collections.Generic; using System.Threading.Tasks; namespace Ewide.Core.Service @@ -14,6 +15,8 @@ namespace Ewide.Core.Service Task SetDataScope(string userId, List dataScopes); Task SetMenu(string userId, string appCode, List menus); Task SetPermission(string userId, List permissions); + Task> GetAreaNumber(); + Task SetAreaNumber(List areaNumbers); Task SetAsync(string key, object value); Task GetAsync(string key); Task GetAsync(string key); diff --git a/Api/Ewide.Core/Service/Cache/SysCacheService.cs b/Api/Ewide.Core/Service/Cache/SysCacheService.cs index 203dcc0..89e3d8a 100644 --- a/Api/Ewide.Core/Service/Cache/SysCacheService.cs +++ b/Api/Ewide.Core/Service/Cache/SysCacheService.cs @@ -1,4 +1,5 @@ -using Furion.DependencyInjection; +using Ewide.Core.Entity; +using Furion.DependencyInjection; using Furion.DynamicApiController; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; @@ -165,5 +166,14 @@ namespace Ewide.Core.Service { return _cache.GetAsync(key); } + public Task> GetAreaNumber() + { + return _cache.GetAsync>(CommonConst.CACHE_AREA_NUMBER); + } + + public async Task SetAreaNumber(List areaNumbers) + { + await _cache.SetAsync(CommonConst.CACHE_AREA_NUMBER,areaNumbers); + } } }