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);
+ }
}
}