Merge branch 'master' of http://118.178.224.202:3000/ewide/ewide_core
This commit is contained in:
@@ -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";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
76
Api/Ewide.Core/Controller/AreaNumberController.cs
Normal file
76
Api/Ewide.Core/Controller/AreaNumberController.cs
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
using Ewide.Core.Service.Area;
|
||||||
|
using Ewide.Core.Service.Area.Dto;
|
||||||
|
using Furion.DynamicApiController;
|
||||||
|
using Mapster;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Ewide.Core.Controller
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 区域代码相关服务
|
||||||
|
/// </summary>
|
||||||
|
[ApiDescriptionSettings(Name = "AreaNumber", Order = 160)]
|
||||||
|
public class AreaNumberController : IDynamicApiController
|
||||||
|
{
|
||||||
|
private readonly IAreaNumberService _areaNumberService;
|
||||||
|
|
||||||
|
public AreaNumberController(IAreaNumberService areaNumberService)
|
||||||
|
{
|
||||||
|
_areaNumberService = areaNumberService;
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="code"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("/area/{code}")]
|
||||||
|
public async Task<AreaNumberOutput> GetAreaNumber([FromRoute]string code)
|
||||||
|
{
|
||||||
|
return (await _areaNumberService.GetAreaNumber(code)).Adapt<AreaNumberOutput>();
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 添加区域信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("/area/add")]
|
||||||
|
public async Task AddAreaNumber(AreaNumberInput input)
|
||||||
|
{
|
||||||
|
await _areaNumberService.AddAreaNumber(input);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 更新区域信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("/area/edit")]
|
||||||
|
public async Task UpdateAreaNumber(AreaNumberInput input)
|
||||||
|
{
|
||||||
|
await _areaNumberService.UpdateAreaNumber(input);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 删除区域
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost("/area/delete")]
|
||||||
|
public async Task DeleteAreaNumber(DeleteAreaNumberInput input)
|
||||||
|
{
|
||||||
|
await _areaNumberService.DeleteAreaNumber(input);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 获取目录树
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet("/area/tree")]
|
||||||
|
public async Task<List<AreaTreeNode>> GetAreaNumberTree()
|
||||||
|
{
|
||||||
|
return await _areaNumberService.GetAreaNumberTree();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -34,13 +34,12 @@ namespace Ewide.Core.Entity
|
|||||||
[Required]
|
[Required]
|
||||||
public int LevelType { get; set; }
|
public int LevelType { get; set; }
|
||||||
|
|
||||||
[Comment("父级区域代码")]
|
|
||||||
[MaxLength(10)]
|
|
||||||
public string ParentCode { get; set; }
|
|
||||||
|
|
||||||
[Comment("排序")]
|
[Comment("排序")]
|
||||||
public int Sort { get; set; }
|
public int Sort { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 父节点就是去掉后面两位
|
||||||
|
/// </summary>
|
||||||
|
public string ParentCode => LevelType>1?Code[0..(Code.Length-2)]:string.Empty;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 多个区域有多个用户绑定自定义数据
|
/// 多个区域有多个用户绑定自定义数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="1.19.2" />
|
<PackageReference Include="Furion.Extras.Authentication.JwtBearer" Version="1.19.2" />
|
||||||
<PackageReference Include="Furion.Extras.Logging.Serilog" Version="1.19.2" />
|
<PackageReference Include="Furion.Extras.Logging.Serilog" Version="1.19.2" />
|
||||||
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="1.19.2" />
|
<PackageReference Include="Furion.Extras.ObjectMapper.Mapster" Version="1.19.2" />
|
||||||
|
<PackageReference Include="Kendo.DynamicLinqCore" Version="3.1.1" />
|
||||||
<PackageReference Include="Quartz" Version="3.3.2" />
|
<PackageReference Include="Quartz" Version="3.3.2" />
|
||||||
<PackageReference Include="System.Drawing.Common" Version="5.0.2" />
|
<PackageReference Include="System.Drawing.Common" Version="5.0.2" />
|
||||||
<PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0" />
|
<PackageReference Include="System.Text.Encoding.CodePages" Version="5.0.0" />
|
||||||
@@ -41,6 +42,9 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<None Update="applicationconfig.Development.json">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
<None Update="applicationconfig.json">
|
<None Update="applicationconfig.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
|
|||||||
@@ -303,6 +303,55 @@
|
|||||||
验证码缓存
|
验证码缓存
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="F:Ewide.Core.CommonConst.CACHE_AREA_NUMBER">
|
||||||
|
<summary>
|
||||||
|
区域缓存
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="T:Ewide.Core.Controller.AreaNumberController">
|
||||||
|
<summary>
|
||||||
|
区域代码相关服务
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Controller.AreaNumberController.GetAreaNumber(System.String)">
|
||||||
|
<summary>
|
||||||
|
|
||||||
|
</summary>
|
||||||
|
<param name="code"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Controller.AreaNumberController.AddAreaNumber(Ewide.Core.Service.Area.Dto.AreaNumberInput)">
|
||||||
|
<summary>
|
||||||
|
添加区域信息
|
||||||
|
</summary>
|
||||||
|
<param name="input"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Controller.AreaNumberController.UpdateAreaNumber(Ewide.Core.Service.Area.Dto.AreaNumberInput)">
|
||||||
|
<summary>
|
||||||
|
更新区域信息
|
||||||
|
</summary>
|
||||||
|
<param name="input"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Controller.AreaNumberController.DeleteAreaNumber(Ewide.Core.Service.Area.Dto.DeleteAreaNumberInput)">
|
||||||
|
<summary>
|
||||||
|
删除区域
|
||||||
|
</summary>
|
||||||
|
<param name="input"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Controller.AreaNumberController.GetAreaNumberTree">
|
||||||
|
<summary>
|
||||||
|
获取目录树
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="P:Ewide.Core.Entity.AreaNumber.ParentCode">
|
||||||
|
<summary>
|
||||||
|
父节点就是去掉后面两位
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="P:Ewide.Core.Entity.AreaNumber.SysUsers">
|
<member name="P:Ewide.Core.Entity.AreaNumber.SysUsers">
|
||||||
<summary>
|
<summary>
|
||||||
多个区域有多个用户绑定自定义数据
|
多个区域有多个用户绑定自定义数据
|
||||||
@@ -2442,6 +2491,19 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<param name="dict"></param>
|
<param name="dict"></param>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="T:Ewide.Core.Extension.PageInputOrder">
|
||||||
|
<summary>
|
||||||
|
通用输入帮助类
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Extension.PageInputOrder.OrderBuilder(Ewide.Core.PageInputBase,System.Boolean)">
|
||||||
|
<summary>
|
||||||
|
排序方式(默认降序)
|
||||||
|
</summary>
|
||||||
|
<param name="pageInput"></param>
|
||||||
|
<param name="descSort">是否降序</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="T:Ewide.Core.XnInputBase">
|
<member name="T:Ewide.Core.XnInputBase">
|
||||||
<summary>
|
<summary>
|
||||||
通用输入扩展参数(带权限)
|
通用输入扩展参数(带权限)
|
||||||
@@ -2497,6 +2559,21 @@
|
|||||||
搜索结束时间
|
搜索结束时间
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:Ewide.Core.PageInputBase.SortField">
|
||||||
|
<summary>
|
||||||
|
排序字段
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:Ewide.Core.PageInputBase.SortOrder">
|
||||||
|
<summary>
|
||||||
|
排序方法,默认升序,否则降序(配合antd前端,约定参数为 Ascend,Dscend)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:Ewide.Core.PageInputBase.DescStr">
|
||||||
|
<summary>
|
||||||
|
降序排序(不要问我为什么是descend不是desc,前端约定参数就是这样)
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:Ewide.Core.XnPageResult`1">
|
<member name="T:Ewide.Core.XnPageResult`1">
|
||||||
<summary>
|
<summary>
|
||||||
小诺分页列表结果
|
小诺分页列表结果
|
||||||
@@ -3050,6 +3127,40 @@
|
|||||||
<param name="input"></param>
|
<param name="input"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Service.Area.AreaNumberService.AddAreaNumber(Ewide.Core.Service.Area.Dto.AreaNumberInput)">
|
||||||
|
<summary>
|
||||||
|
添加一个区域
|
||||||
|
</summary>
|
||||||
|
<param name="input"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Service.Area.AreaNumberService.DeleteAreaNumber(Ewide.Core.Service.Area.Dto.DeleteAreaNumberInput)">
|
||||||
|
<summary>
|
||||||
|
删除一个区域
|
||||||
|
</summary>
|
||||||
|
<param name="input"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Service.Area.AreaNumberService.GetAreaNumber(System.String)">
|
||||||
|
<summary>
|
||||||
|
根据区域代码获取区域信息
|
||||||
|
</summary>
|
||||||
|
<param name="code">区域代码</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Service.Area.AreaNumberService.GetAreaNumberTree">
|
||||||
|
<summary>
|
||||||
|
获取区域目录树
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
|
<member name="M:Ewide.Core.Service.Area.AreaNumberService.UpdateAreaNumber(Ewide.Core.Service.Area.Dto.AreaNumberInput)">
|
||||||
|
<summary>
|
||||||
|
更新区域信息
|
||||||
|
</summary>
|
||||||
|
<param name="input"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="T:Ewide.Core.Service.AuthService">
|
<member name="T:Ewide.Core.Service.AuthService">
|
||||||
<summary>
|
<summary>
|
||||||
登录授权相关服务
|
登录授权相关服务
|
||||||
@@ -5473,6 +5584,11 @@
|
|||||||
状态(字典 0正常 1停用 2删除)
|
状态(字典 0正常 1停用 2删除)
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:Ewide.Core.Service.OrgInput.AreaNumberCode">
|
||||||
|
<summary>
|
||||||
|
机构所在区域
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="P:Ewide.Core.Service.AddOrgInput.Name">
|
<member name="P:Ewide.Core.Service.AddOrgInput.Name">
|
||||||
<summary>
|
<summary>
|
||||||
名称
|
名称
|
||||||
@@ -5483,6 +5599,11 @@
|
|||||||
编码
|
编码
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:Ewide.Core.Service.AddOrgInput.AreaNumberCode">
|
||||||
|
<summary>
|
||||||
|
机构所在区域
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="P:Ewide.Core.Service.DeleteOrgInput.Id">
|
<member name="P:Ewide.Core.Service.DeleteOrgInput.Id">
|
||||||
<summary>
|
<summary>
|
||||||
机构Id
|
机构Id
|
||||||
@@ -7058,7 +7179,7 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<typeparam name="T"></typeparam>
|
<typeparam name="T"></typeparam>
|
||||||
</member>
|
</member>
|
||||||
<member name="F:Ewide.Core.TreeBuildUtil`1._rootParentId">
|
<member name="F:Ewide.Core.TreeBuildUtil`1._rootParentIds">
|
||||||
<summary>
|
<summary>
|
||||||
顶级节点的父节点Id(默认0)
|
顶级节点的父节点Id(默认0)
|
||||||
</summary>
|
</summary>
|
||||||
|
|||||||
33
Api/Ewide.Core/Extension/PageInputOrder.cs
Normal file
33
Api/Ewide.Core/Extension/PageInputOrder.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Ewide.Core.Extension
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 通用输入帮助类
|
||||||
|
/// </summary>
|
||||||
|
public class PageInputOrder
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 排序方式(默认降序)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="pageInput"></param>
|
||||||
|
/// <param name="descSort">是否降序</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string OrderBuilder(PageInputBase pageInput, bool descSort = true)
|
||||||
|
{
|
||||||
|
// 约定默认每张表都有Id排序
|
||||||
|
var orderStr = descSort ? "Id Desc" : "Id Asc";
|
||||||
|
|
||||||
|
// 排序是否可用-排序字段和排序顺序都为非空才启用排序
|
||||||
|
if (!string.IsNullOrEmpty(pageInput.SortField) && !string.IsNullOrEmpty(pageInput.SortOrder))
|
||||||
|
{
|
||||||
|
orderStr = $"{pageInput.SortField} {(pageInput.SortOrder == pageInput.DescStr ? "Desc" : "Asc")}";
|
||||||
|
}
|
||||||
|
return orderStr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -56,5 +56,20 @@ namespace Ewide.Core
|
|||||||
/// 搜索结束时间
|
/// 搜索结束时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual string SearchEndTime { get; set; }
|
public virtual string SearchEndTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 排序字段
|
||||||
|
/// </summary>
|
||||||
|
public virtual string SortField { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 排序方法,默认升序,否则降序(配合antd前端,约定参数为 Ascend,Dscend)
|
||||||
|
/// </summary>
|
||||||
|
public virtual string SortOrder { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 降序排序(不要问我为什么是descend不是desc,前端约定参数就是这样)
|
||||||
|
/// </summary>
|
||||||
|
public virtual string DescStr { get; set; } = "descend";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,10 @@ using Ewide.Core.Service.Area.Dto;
|
|||||||
using Furion.DatabaseAccessor;
|
using Furion.DatabaseAccessor;
|
||||||
using Furion.DatabaseAccessor.Extensions;
|
using Furion.DatabaseAccessor.Extensions;
|
||||||
using Furion.DependencyInjection;
|
using Furion.DependencyInjection;
|
||||||
|
using Furion.DynamicApiController;
|
||||||
|
using Furion.FriendlyException;
|
||||||
using Mapster;
|
using Mapster;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -16,37 +19,103 @@ 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>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <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>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
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>
|
||||||
|
/// <param name="code">区域代码</param>
|
||||||
|
/// <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>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<List<AreaTreeNode>> GetAreaNumberTree()
|
||||||
|
{
|
||||||
|
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
|
||||||
|
}).ToList());
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<AreaNumber>> GetAreaNumberWithChildren(string code)
|
public async Task<List<AreaNumber>> GetAreaNumberWithChildren(string code)
|
||||||
{
|
{
|
||||||
return await _areaNumberRep.DetachedEntities.Where(a => a.Code.StartsWith(code)).ToListAsync();
|
return await _areaNumberRep.DetachedEntities.Where(a => a.Code.StartsWith(code)).ToListAsync();
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 更新区域信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
public async Task UpdateAreaNumber(AreaNumberInput input)
|
public async Task UpdateAreaNumber(AreaNumberInput input)
|
||||||
{
|
{
|
||||||
await _areaNumberRep.UpdateAsync(input.Adapt<AreaNumber>());
|
CheckInput(input);
|
||||||
|
var area = input.Adapt<AreaNumber>();
|
||||||
|
await area.UpdateNowAsync();
|
||||||
|
await _sysCacheService.SetAreaNumber(await _areaNumberRep.DetachedEntities.ToListAsync());
|
||||||
|
}
|
||||||
|
private bool CheckInput(AreaNumberInput input)
|
||||||
|
{
|
||||||
|
//检查level和区域长度
|
||||||
|
if (false)
|
||||||
|
{
|
||||||
|
throw Oops.Oh("数据异常");
|
||||||
|
}
|
||||||
|
//检查是否有子节点
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,14 @@ namespace Ewide.Core.Service.Area.Dto
|
|||||||
public string Note { get; set; }
|
public string Note { get; set; }
|
||||||
public int Sort { get; set; }
|
public int Sort { get; set; }
|
||||||
}
|
}
|
||||||
|
public class UpdateAreaNumberInput
|
||||||
|
{
|
||||||
|
public string ShowCode { get; set; }
|
||||||
|
public string Name { get; set; }
|
||||||
|
public int LevelType { get; set; }
|
||||||
|
public string Note { get; set; }
|
||||||
|
public int Sort { get; set; }
|
||||||
|
}
|
||||||
public class DeleteAreaNumberInput
|
public class DeleteAreaNumberInput
|
||||||
{
|
{
|
||||||
[Required(ErrorMessage ="区域代码不可为空")]
|
[Required(ErrorMessage ="区域代码不可为空")]
|
||||||
|
|||||||
33
Api/Ewide.Core/Service/Area/Dto/AreaNumberOutput.cs
Normal file
33
Api/Ewide.Core/Service/Area/Dto/AreaNumberOutput.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Ewide.Core.Service.Area.Dto
|
||||||
|
{
|
||||||
|
public class AreaNumberOutput:AreaNumberInput
|
||||||
|
{
|
||||||
|
public string ParentCode { get; set; }
|
||||||
|
}
|
||||||
|
public class AreaTreeNode : AreaNumberOutput, ITreeNode
|
||||||
|
{
|
||||||
|
public List<AreaTreeNode> Children { get; set; } = new List<AreaTreeNode>();
|
||||||
|
|
||||||
|
public string GetId()
|
||||||
|
{
|
||||||
|
return Code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetPid()
|
||||||
|
{
|
||||||
|
return ParentCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetChildren(IList children)
|
||||||
|
{
|
||||||
|
Children = (List<AreaTreeNode>)children;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -15,5 +15,7 @@ namespace Ewide.Core.Service.Area
|
|||||||
Task UpdateAreaNumber(AreaNumberInput input);
|
Task UpdateAreaNumber(AreaNumberInput input);
|
||||||
Task<AreaNumber> GetAreaNumber(string code);
|
Task<AreaNumber> GetAreaNumber(string code);
|
||||||
Task<List<AreaNumber>> GetAreaNumberWithChildren(string code);
|
Task<List<AreaNumber>> GetAreaNumberWithChildren(string code);
|
||||||
|
|
||||||
|
Task<List<AreaTreeNode>> GetAreaNumberTree();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Furion.DatabaseAccessor;
|
using Ewide.Core.Extension;
|
||||||
|
using Furion.DatabaseAccessor;
|
||||||
using Furion.DatabaseAccessor.Extensions;
|
using Furion.DatabaseAccessor.Extensions;
|
||||||
using Furion.DependencyInjection;
|
using Furion.DependencyInjection;
|
||||||
using Furion.DynamicApiController;
|
using Furion.DynamicApiController;
|
||||||
@@ -7,6 +8,7 @@ using Microsoft.AspNetCore.Mvc;
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System;
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Linq.Dynamic.Core;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Ewide.Core.Service
|
namespace Ewide.Core.Service
|
||||||
@@ -41,7 +43,7 @@ namespace Ewide.Core.Service
|
|||||||
.Where(success, u => u.Success == input.Success.Value)
|
.Where(success, u => u.Success == input.Success.Value)
|
||||||
.Where(searchBeginTime, u => u.OpTime >= DateTime.Parse(input.SearchBeginTime.Trim()) &&
|
.Where(searchBeginTime, u => u.OpTime >= DateTime.Parse(input.SearchBeginTime.Trim()) &&
|
||||||
u.OpTime <= DateTime.Parse(input.SearchEndTime.Trim()))
|
u.OpTime <= DateTime.Parse(input.SearchEndTime.Trim()))
|
||||||
.OrderByDescending(u => u.Id)
|
.OrderBy(PageInputOrder.OrderBuilder(input)) // 封装了任意字段排序示例
|
||||||
.Select(u => u.Adapt<OpLogOutput>())
|
.Select(u => u.Adapt<OpLogOutput>())
|
||||||
.ToPagedListAsync(input.PageNo, input.PageSize);
|
.ToPagedListAsync(input.PageNo, input.PageSize);
|
||||||
return XnPageResult<OpLogOutput>.PageResult(opLogs);
|
return XnPageResult<OpLogOutput>.PageResult(opLogs);
|
||||||
|
|||||||
@@ -46,6 +46,10 @@ namespace Ewide.Core.Service
|
|||||||
/// 状态(字典 0正常 1停用 2删除)
|
/// 状态(字典 0正常 1停用 2删除)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int Status { get; set; }
|
public int Status { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 机构所在区域
|
||||||
|
/// </summary>
|
||||||
|
public virtual string AreaNumberCode { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class AddOrgInput : OrgInput
|
public class AddOrgInput : OrgInput
|
||||||
@@ -61,6 +65,11 @@ namespace Ewide.Core.Service
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
[Required(ErrorMessage = "机构编码不能为空")]
|
[Required(ErrorMessage = "机构编码不能为空")]
|
||||||
public override string Code { get; set; }
|
public override string Code { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 机构所在区域
|
||||||
|
/// </summary>
|
||||||
|
[Required(ErrorMessage = "机构所在区域不能为空")]
|
||||||
|
public override string AreaNumberCode { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class DeleteOrgInput
|
public class DeleteOrgInput
|
||||||
|
|||||||
@@ -83,5 +83,9 @@ namespace Ewide.Core.Service
|
|||||||
public class GrantRoleDataInput : GrantRoleMenuInput
|
public class GrantRoleDataInput : GrantRoleMenuInput
|
||||||
{
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
public class GrantAreaDataInput : GrantRoleMenuInput
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,6 @@ namespace Ewide.Core.Service.Role
|
|||||||
Task DeleteRoleAreaListByAreaCodeList(List<string> areaCodeList);
|
Task DeleteRoleAreaListByAreaCodeList(List<string> areaCodeList);
|
||||||
Task DeleteRoleAreaListByRoleId(string roleId);
|
Task DeleteRoleAreaListByRoleId(string roleId);
|
||||||
Task<List<string>> GetRoleAreaCodeList(List<string> roleIdList);
|
Task<List<string>> GetRoleAreaCodeList(List<string> roleIdList);
|
||||||
Task GrantArea(UpdateRoleInput input);
|
Task GrantArea(GrantAreaDataInput input);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ namespace Ewide.Core.Service.Role
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task GrantArea(UpdateRoleInput input)
|
public async Task GrantArea(GrantAreaDataInput input)
|
||||||
{
|
{
|
||||||
var dataScopes = await _sysRoleAreaRep.Where(u => u.SysRoleId == input.Id).ToListAsync();
|
var dataScopes = await _sysRoleAreaRep.Where(u => u.SysRoleId == input.Id).ToListAsync();
|
||||||
dataScopes.ForEach(u =>
|
dataScopes.ForEach(u =>
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
using Furion.DatabaseAccessor;
|
using Ewide.Core.Service.Role;
|
||||||
|
using Furion.DatabaseAccessor;
|
||||||
using Furion.DatabaseAccessor.Extensions;
|
using Furion.DatabaseAccessor.Extensions;
|
||||||
using Furion.DependencyInjection;
|
using Furion.DependencyInjection;
|
||||||
|
using Mapster;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -14,10 +16,11 @@ namespace Ewide.Core.Service
|
|||||||
public class SysRoleDataScopeService : ISysRoleDataScopeService, ITransient
|
public class SysRoleDataScopeService : ISysRoleDataScopeService, ITransient
|
||||||
{
|
{
|
||||||
private readonly IRepository<SysRoleDataScope> _sysRoleDataScopeRep; // 角色数据范围表仓储
|
private readonly IRepository<SysRoleDataScope> _sysRoleDataScopeRep; // 角色数据范围表仓储
|
||||||
|
private readonly ISysRoleAreaService _sysRoleAreaService;
|
||||||
public SysRoleDataScopeService(IRepository<SysRoleDataScope> sysRoleDataScopeRep)
|
public SysRoleDataScopeService(IRepository<SysRoleDataScope> sysRoleDataScopeRep, ISysRoleAreaService sysRoleAreaService)
|
||||||
{
|
{
|
||||||
_sysRoleDataScopeRep = sysRoleDataScopeRep;
|
_sysRoleDataScopeRep = sysRoleDataScopeRep;
|
||||||
|
_sysRoleAreaService = sysRoleAreaService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -28,6 +31,11 @@ namespace Ewide.Core.Service
|
|||||||
[UnitOfWork]
|
[UnitOfWork]
|
||||||
public async Task GrantDataScope(GrantRoleDataInput input)
|
public async Task GrantDataScope(GrantRoleDataInput input)
|
||||||
{
|
{
|
||||||
|
if (new[] { (int)DataScopeType.AREA, (int)DataScopeType.AREA_WITH_CHILD }.Contains(input.DataScopeType))
|
||||||
|
{
|
||||||
|
await _sysRoleAreaService.GrantArea(input.Adapt<GrantAreaDataInput>());
|
||||||
|
return;
|
||||||
|
}
|
||||||
var dataScopes = await _sysRoleDataScopeRep.DetachedEntities.Where(u => u.SysRoleId == input.Id).ToListAsync();
|
var dataScopes = await _sysRoleDataScopeRep.DetachedEntities.Where(u => u.SysRoleId == input.Id).ToListAsync();
|
||||||
dataScopes.ForEach(u =>
|
dataScopes.ForEach(u =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -46,6 +46,22 @@ namespace Ewide.Core.Service
|
|||||||
SysOrgId = u
|
SysOrgId = u
|
||||||
}.Insert();
|
}.Insert();
|
||||||
});
|
});
|
||||||
|
var areas = await _sysUserAreaRep.Where(u => u.SysUserId == input.Id).ToListAsync();
|
||||||
|
areas.ForEach(u =>
|
||||||
|
{
|
||||||
|
u.Delete();
|
||||||
|
});
|
||||||
|
|
||||||
|
input.GrantAreaCodeList.ForEach(u =>
|
||||||
|
{
|
||||||
|
new SysUserArea
|
||||||
|
{
|
||||||
|
SysUserId = input.Id,
|
||||||
|
AreaNumberCode = u
|
||||||
|
}.Insert();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace Ewide.Core
|
namespace Ewide.Core
|
||||||
@@ -36,7 +37,7 @@ namespace Ewide.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 顶级节点的父节点Id(默认0)
|
/// 顶级节点的父节点Id(默认0)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private readonly string _rootParentId = System.Guid.Empty.ToString().ToLower();
|
private readonly List<string> _rootParentIds = new List<string> {string.Empty,Guid.Empty.ToString() };
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 构造树节点
|
/// 构造树节点
|
||||||
@@ -50,7 +51,7 @@ namespace Ewide.Core
|
|||||||
var results = new List<T>();
|
var results = new List<T>();
|
||||||
nodes.ForEach(u =>
|
nodes.ForEach(u =>
|
||||||
{
|
{
|
||||||
if (_rootParentId == u.GetPid())
|
if (_rootParentIds.Contains(u.GetPid()))
|
||||||
results.Add(u);
|
results.Add(u);
|
||||||
});
|
});
|
||||||
return results;
|
return results;
|
||||||
|
|||||||
6986
Api/Ewide.Database.Migrations/Migrations/20210427093101_removeAreaNumberParent.Designer.cs
generated
Normal file
6986
Api/Ewide.Database.Migrations/Migrations/20210427093101_removeAreaNumberParent.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,25 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
|
namespace Ewide.Database.Migrations.Migrations
|
||||||
|
{
|
||||||
|
public partial class removeAreaNumberParent : Migration
|
||||||
|
{
|
||||||
|
protected override void Up(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.DropColumn(
|
||||||
|
name: "ParentCode",
|
||||||
|
table: "ewide_area_number");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
|
{
|
||||||
|
migrationBuilder.AddColumn<string>(
|
||||||
|
name: "ParentCode",
|
||||||
|
table: "ewide_area_number",
|
||||||
|
type: "varchar(10) CHARACTER SET utf8mb4",
|
||||||
|
maxLength: 10,
|
||||||
|
nullable: true,
|
||||||
|
comment: "父级区域代码");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -102,11 +102,6 @@ namespace Ewide.Database.Migrations.Migrations
|
|||||||
.HasColumnType("longtext CHARACTER SET utf8mb4")
|
.HasColumnType("longtext CHARACTER SET utf8mb4")
|
||||||
.HasComment("备注");
|
.HasComment("备注");
|
||||||
|
|
||||||
b.Property<string>("ParentCode")
|
|
||||||
.HasMaxLength(10)
|
|
||||||
.HasColumnType("varchar(10) CHARACTER SET utf8mb4")
|
|
||||||
.HasComment("父级区域代码");
|
|
||||||
|
|
||||||
b.Property<string>("ShowCode")
|
b.Property<string>("ShowCode")
|
||||||
.HasMaxLength(10)
|
.HasMaxLength(10)
|
||||||
.HasColumnType("varchar(10) CHARACTER SET utf8mb4")
|
.HasColumnType("varchar(10) CHARACTER SET utf8mb4")
|
||||||
|
|||||||
@@ -144,7 +144,7 @@ export default {
|
|||||||
|
|
||||||
onCloseContentWindow(key) {
|
onCloseContentWindow(key) {
|
||||||
key = key || this.tabActived;
|
key = key || this.tabActived;
|
||||||
const i = this.$_.findIndex(this.panes, (p) => p.key === key);
|
const i = this.$_.findIndex(this.panes, (p) => p.key === key && p.closable);
|
||||||
this.panes.splice(i, 1);
|
this.panes.splice(i, 1);
|
||||||
|
|
||||||
if (this.panes.length) {
|
if (this.panes.length) {
|
||||||
|
|||||||
Reference in New Issue
Block a user