update:区域数据新增缓存
This commit is contained in:
@@ -19,12 +19,14 @@ namespace Ewide.Core.Service.Area
|
||||
public class AreaNumberService : IAreaNumberService, ITransient
|
||||
{
|
||||
private readonly IRepository<AreaNumber> _areaNumberRep;
|
||||
private readonly IRepository<SysOrg> _sysOrgRep;
|
||||
private readonly ISysCacheService _sysCacheService;
|
||||
|
||||
public AreaNumberService(IRepository<AreaNumber> areaNumberRep, ISysCacheService sysCacheService)
|
||||
public AreaNumberService(IRepository<AreaNumber> areaNumberRep, ISysCacheService sysCacheService, IRepository<SysOrg> sysOrgRep)
|
||||
{
|
||||
_areaNumberRep = areaNumberRep;
|
||||
_sysCacheService = sysCacheService;
|
||||
_sysOrgRep = sysOrgRep;
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加一个区域
|
||||
@@ -33,7 +35,9 @@ namespace Ewide.Core.Service.Area
|
||||
/// <returns></returns>
|
||||
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>
|
||||
/// 删除一个区域
|
||||
@@ -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());
|
||||
}
|
||||
/// <summary>
|
||||
/// 根据区域代码获取区域信息
|
||||
@@ -52,7 +61,13 @@ namespace Ewide.Core.Service.Area
|
||||
/// <returns></returns>
|
||||
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>
|
||||
/// 获取区域目录树
|
||||
@@ -60,14 +75,20 @@ namespace Ewide.Core.Service.Area
|
||||
/// <returns></returns>
|
||||
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,
|
||||
ParentCode = u.ParentCode,
|
||||
Name = u.Name,
|
||||
LevelType = u.LevelType,
|
||||
Note = u.Note
|
||||
}).ToListAsync());
|
||||
}).ToList());
|
||||
}
|
||||
|
||||
public async Task<List<AreaNumber>> GetAreaNumberWithChildren(string code)
|
||||
@@ -83,14 +104,15 @@ namespace Ewide.Core.Service.Area
|
||||
{
|
||||
CheckInput(input);
|
||||
var area = input.Adapt<AreaNumber>();
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user