update:区域数据新增缓存

This commit is contained in:
2021-04-28 13:42:36 +08:00
parent e717e581d3
commit 90d403c9ca
6 changed files with 55 additions and 11 deletions

View File

@@ -31,5 +31,9 @@
/// 验证码缓存 /// 验证码缓存
/// </summary> /// </summary>
public const string CACHE_KEY_CODE = "vercode_"; public const string CACHE_KEY_CODE = "vercode_";
/// <summary>
/// 区域缓存
/// </summary>
public const string CACHE_AREA_NUMBER = "areaNumber";
} }
} }

View File

@@ -51,7 +51,7 @@ namespace Ewide.Core.Controller
[HttpPost("/area/edit")] [HttpPost("/area/edit")]
public async Task UpdateAreaNumber(AreaNumberInput input) public async Task UpdateAreaNumber(AreaNumberInput input)
{ {
await _areaNumberService.AddAreaNumber(input); await _areaNumberService.UpdateAreaNumber(input);
} }
/// <summary> /// <summary>
/// 删除区域 /// 删除区域

View File

@@ -303,6 +303,11 @@
验证码缓存 验证码缓存
</summary> </summary>
</member> </member>
<member name="F:Ewide.Core.CommonConst.CACHE_AREA_NUMBER">
<summary>
区域缓存
</summary>
</member>
<member name="T:Ewide.Core.Controller.AreaNumberController"> <member name="T:Ewide.Core.Controller.AreaNumberController">
<summary> <summary>
区域代码相关服务 区域代码相关服务

View File

@@ -19,12 +19,14 @@ namespace Ewide.Core.Service.Area
public class AreaNumberService : IAreaNumberService, ITransient public class AreaNumberService : IAreaNumberService, ITransient
{ {
private readonly IRepository<AreaNumber> _areaNumberRep; private readonly IRepository<AreaNumber> _areaNumberRep;
private readonly IRepository<SysOrg> _sysOrgRep;
private readonly ISysCacheService _sysCacheService; private readonly ISysCacheService _sysCacheService;
public AreaNumberService(IRepository<AreaNumber> areaNumberRep, ISysCacheService sysCacheService) public AreaNumberService(IRepository<AreaNumber> areaNumberRep, ISysCacheService sysCacheService, IRepository<SysOrg> sysOrgRep)
{ {
_areaNumberRep = areaNumberRep; _areaNumberRep = areaNumberRep;
_sysCacheService = sysCacheService; _sysCacheService = sysCacheService;
_sysOrgRep = sysOrgRep;
} }
/// <summary> /// <summary>
/// 添加一个区域 /// 添加一个区域
@@ -33,7 +35,9 @@ namespace Ewide.Core.Service.Area
/// <returns></returns> /// <returns></returns>
public async Task AddAreaNumber(AreaNumberInput input) public async Task AddAreaNumber(AreaNumberInput input)
{ {
await _areaNumberRep.InsertAsync(input.Adapt<AreaNumber>()); CheckInput(input);
await _areaNumberRep.InsertNowAsync(input.Adapt<AreaNumber>());
await _sysCacheService.SetAreaNumber(await _areaNumberRep.DetachedEntities.ToListAsync());
} }
/// <summary> /// <summary>
/// 删除一个区域 /// 删除一个区域
@@ -43,7 +47,12 @@ namespace Ewide.Core.Service.Area
public async Task DeleteAreaNumber(DeleteAreaNumberInput input) public async Task DeleteAreaNumber(DeleteAreaNumberInput input)
{ {
var areaNumber = await _areaNumberRep.FirstOrDefaultAsync(p => p.Code == input.Code); 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());
} }
/// <summary> /// <summary>
/// 根据区域代码获取区域信息 /// 根据区域代码获取区域信息
@@ -52,7 +61,13 @@ namespace Ewide.Core.Service.Area
/// <returns></returns> /// <returns></returns>
public async Task<AreaNumber> GetAreaNumber(string code) public async Task<AreaNumber> 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);
} }
/// <summary> /// <summary>
/// 获取区域目录树 /// 获取区域目录树
@@ -60,14 +75,20 @@ namespace Ewide.Core.Service.Area
/// <returns></returns> /// <returns></returns>
public async Task<List<AreaTreeNode>> GetAreaNumberTree() public async Task<List<AreaTreeNode>> GetAreaNumberTree()
{ {
return new TreeBuildUtil<AreaTreeNode>().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<AreaTreeNode>().DoTreeBuild(cachedAreaNumbers.Select(u => new AreaTreeNode
{ {
Code = u.Code, Code = u.Code,
ParentCode = u.ParentCode, ParentCode = u.ParentCode,
Name = u.Name, Name = u.Name,
LevelType = u.LevelType, LevelType = u.LevelType,
Note = u.Note Note = u.Note
}).ToListAsync()); }).ToList());
} }
public async Task<List<AreaNumber>> GetAreaNumberWithChildren(string code) public async Task<List<AreaNumber>> GetAreaNumberWithChildren(string code)
@@ -83,14 +104,15 @@ namespace Ewide.Core.Service.Area
{ {
CheckInput(input); CheckInput(input);
var area = input.Adapt<AreaNumber>(); var area = input.Adapt<AreaNumber>();
await area.UpdateAsync(); await area.UpdateNowAsync();
await _sysCacheService.SetAreaNumber(await _areaNumberRep.DetachedEntities.ToListAsync());
} }
private bool CheckInput(AreaNumberInput input) private bool CheckInput(AreaNumberInput input)
{ {
//检查level和区域长度 //检查level和区域长度
if (false) if (false)
{ {
Oops.Oh("数据异常"); throw Oops.Oh("数据异常");
} }
//检查是否有子节点 //检查是否有子节点
return true; return true;

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic; using Ewide.Core.Entity;
using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Ewide.Core.Service namespace Ewide.Core.Service
@@ -14,6 +15,8 @@ namespace Ewide.Core.Service
Task SetDataScope(string userId, List<string> dataScopes); Task SetDataScope(string userId, List<string> dataScopes);
Task SetMenu(string userId, string appCode, List<AntDesignTreeNode> menus); Task SetMenu(string userId, string appCode, List<AntDesignTreeNode> menus);
Task SetPermission(string userId, List<string> permissions); Task SetPermission(string userId, List<string> permissions);
Task<List<AreaNumber>> GetAreaNumber();
Task SetAreaNumber(List<AreaNumber> areaNumbers);
Task<bool> SetAsync(string key, object value); Task<bool> SetAsync(string key, object value);
Task<string> GetAsync(string key); Task<string> GetAsync(string key);
Task<T> GetAsync<T>(string key); Task<T> GetAsync<T>(string key);

View File

@@ -1,4 +1,5 @@
using Furion.DependencyInjection; using Ewide.Core.Entity;
using Furion.DependencyInjection;
using Furion.DynamicApiController; using Furion.DynamicApiController;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
@@ -165,5 +166,14 @@ namespace Ewide.Core.Service
{ {
return _cache.GetAsync<T>(key); return _cache.GetAsync<T>(key);
} }
public Task<List<AreaNumber>> GetAreaNumber()
{
return _cache.GetAsync<List<AreaNumber>>(CommonConst.CACHE_AREA_NUMBER);
}
public async Task SetAreaNumber(List<AreaNumber> areaNumbers)
{
await _cache.SetAsync(CommonConst.CACHE_AREA_NUMBER,areaNumbers);
}
} }
} }