mirror of
https://gitee.com/dotnetchina/OpenAuth.Net.git
synced 2025-11-10 03:14:45 +08:00
⚠️feat: #ICGHSO 统一使用SqlSugar
This commit is contained in:
58
OpenAuth.App/Base/SqlSugarBaseTreeApp.cs
Normal file
58
OpenAuth.App/Base/SqlSugarBaseTreeApp.cs
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using OpenAuth.App.Interface;
|
||||||
|
using OpenAuth.Repository.Core;
|
||||||
|
using SqlSugar;
|
||||||
|
using OpenAuth.Repository.Interface;
|
||||||
|
|
||||||
|
namespace OpenAuth.App
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 树状结构处理
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// /// <typeparam name="TDbContext"></typeparam>
|
||||||
|
public class SqlSugarBaseTreeApp<T> :SqlSugarBaseApp<T> where T : TreeEntity, new()
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
public SqlSugarBaseTreeApp(ISqlSugarClient client, IAuth auth)
|
||||||
|
: base(client, auth)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 更新树状结构实体
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="obj"></param>
|
||||||
|
/// <typeparam name="U"></typeparam>
|
||||||
|
public void UpdateTreeObj<U>(U obj) where U : TreeEntity, new()
|
||||||
|
{
|
||||||
|
CaculateCascade(obj);
|
||||||
|
|
||||||
|
//获取旧的的CascadeId
|
||||||
|
var cascadeId = SugarClient.Queryable<U>().First(o => o.Id == obj.Id).CascadeId;
|
||||||
|
//根据CascadeId查询子部门
|
||||||
|
var objs = SugarClient.Queryable<U>().Where(u => u.CascadeId.Contains(cascadeId) && u.Id != obj.Id)
|
||||||
|
.OrderBy(u => u.CascadeId).ToList();
|
||||||
|
|
||||||
|
//更新操作
|
||||||
|
SugarClient.Updateable(obj).ExecuteCommand();
|
||||||
|
|
||||||
|
//更新子模块的CascadeId
|
||||||
|
foreach (var a in objs)
|
||||||
|
{
|
||||||
|
a.CascadeId = a.CascadeId.Replace(cascadeId, obj.CascadeId);
|
||||||
|
if (a.ParentId == obj.Id)
|
||||||
|
{
|
||||||
|
a.ParentName = obj.Name;
|
||||||
|
}
|
||||||
|
|
||||||
|
SugarClient.Updateable(a).ExecuteCommand();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -7,10 +7,11 @@ using OpenAuth.App.Request;
|
|||||||
using OpenAuth.Repository;
|
using OpenAuth.Repository;
|
||||||
using OpenAuth.Repository.Domain;
|
using OpenAuth.Repository.Domain;
|
||||||
using OpenAuth.Repository.Interface;
|
using OpenAuth.Repository.Interface;
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
namespace OpenAuth.App
|
namespace OpenAuth.App
|
||||||
{
|
{
|
||||||
public class OrgManagerApp : BaseTreeApp<SysOrg,OpenAuthDBContext>
|
public class OrgManagerApp : SqlSugarBaseTreeApp<SysOrg>
|
||||||
{
|
{
|
||||||
private RevelanceManagerApp _revelanceApp;
|
private RevelanceManagerApp _revelanceApp;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -28,10 +29,8 @@ namespace OpenAuth.App
|
|||||||
}
|
}
|
||||||
CaculateCascade(sysOrg);
|
CaculateCascade(sysOrg);
|
||||||
|
|
||||||
UnitWork.ExecuteWithTransaction(() =>
|
SugarClient.Ado.BeginTran();
|
||||||
{
|
Repository.Insert(sysOrg);
|
||||||
UnitWork.Add(sysOrg);
|
|
||||||
UnitWork.Save();
|
|
||||||
|
|
||||||
//如果当前账号不是SYSTEM,则直接分配
|
//如果当前账号不是SYSTEM,则直接分配
|
||||||
if (loginContext.User.Account != Define.SYSTEM_USERNAME)
|
if (loginContext.User.Account != Define.SYSTEM_USERNAME)
|
||||||
@@ -43,7 +42,7 @@ namespace OpenAuth.App
|
|||||||
secIds = new[] { sysOrg.Id }
|
secIds = new[] { sysOrg.Id }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
SugarClient.Ado.CommitTran();
|
||||||
|
|
||||||
return sysOrg.Id;
|
return sysOrg.Id;
|
||||||
}
|
}
|
||||||
@@ -64,16 +63,15 @@ namespace OpenAuth.App
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void DelOrgCascade(string[] ids)
|
public void DelOrgCascade(string[] ids)
|
||||||
{
|
{
|
||||||
var delOrgCascadeIds = UnitWork.Find<SysOrg>(u => ids.Contains(u.Id)).Select(u => u.CascadeId).ToArray();
|
var delOrgCascadeIds = SugarClient.Queryable<SysOrg>().Where(u => ids.Contains(u.Id)).Select(u => u.CascadeId).ToArray();
|
||||||
var delOrgIds = new List<string>();
|
var delOrgIds = new List<string>();
|
||||||
foreach (var cascadeId in delOrgCascadeIds)
|
foreach (var cascadeId in delOrgCascadeIds)
|
||||||
{
|
{
|
||||||
delOrgIds.AddRange(UnitWork.Find<SysOrg>(u=>u.CascadeId.Contains(cascadeId)).Select(u =>u.Id).ToArray());
|
delOrgIds.AddRange(SugarClient.Queryable<SysOrg>().Where(u => u.CascadeId.Contains(cascadeId)).Select(u => u.Id).ToArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
UnitWork.Delete<Relevance>(u =>u.RelKey == Define.USERORG && delOrgIds.Contains(u.SecondId));
|
SugarClient.Deleteable<Relevance>().Where(u => u.RelKey == Define.USERORG && delOrgIds.Contains(u.SecondId)).ExecuteCommand();
|
||||||
UnitWork.Delete<SysOrg>(u => delOrgIds.Contains(u.Id));
|
SugarClient.Deleteable<SysOrg>().Where(u => delOrgIds.Contains(u.Id)).ExecuteCommand();
|
||||||
UnitWork.Save();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,22 +81,22 @@ namespace OpenAuth.App
|
|||||||
/// <param name="userId">The user unique identifier.</param>
|
/// <param name="userId">The user unique identifier.</param>
|
||||||
public List<SysOrg> LoadForUser(string userId)
|
public List<SysOrg> LoadForUser(string userId)
|
||||||
{
|
{
|
||||||
var result = from userorg in UnitWork.Find<Relevance>(null)
|
var result = SugarClient.Queryable<Relevance>()
|
||||||
join org in UnitWork.Find<SysOrg>(null) on userorg.SecondId equals org.Id
|
.LeftJoin<SysOrg>((u, o) => u.SecondId == o.Id)
|
||||||
where userorg.FirstId == userId && userorg.RelKey == Define.USERORG
|
.Where((u, o) => u.FirstId == userId && u.RelKey == Define.USERORG)
|
||||||
select org;
|
.Select((u, o) => o);
|
||||||
return result.ToList();
|
return result.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public OrgManagerApp(IUnitWork<OpenAuthDBContext> unitWork, IRepository<SysOrg,OpenAuthDBContext> repository,IAuth auth,
|
public OrgManagerApp(ISqlSugarClient client, IAuth auth,
|
||||||
RevelanceManagerApp revelanceApp) : base(unitWork, repository, auth)
|
RevelanceManagerApp revelanceApp) : base(client, auth)
|
||||||
{
|
{
|
||||||
_revelanceApp = revelanceApp;
|
_revelanceApp = revelanceApp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public string[] GetChairmanId(string[] orgIds)
|
public string[] GetChairmanId(string[] orgIds)
|
||||||
{
|
{
|
||||||
return Repository.Find(u => orgIds.Contains(u.Id)&&u.ChairmanId!= null).Select(u => u.ChairmanId).ToArray();
|
return SugarClient.Queryable<SysOrg>().Where(u => orgIds.Contains(u.Id) && u.ChairmanId != null).Select(u => u.ChairmanId).ToArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -11,9 +11,11 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using OpenAuth.App.Request;
|
using OpenAuth.App.Request;
|
||||||
using OpenAuth.Repository;
|
using OpenAuth.Repository;
|
||||||
|
|
||||||
|
using SqlSugar;
|
||||||
|
|
||||||
namespace OpenAuth.App
|
namespace OpenAuth.App
|
||||||
{
|
{
|
||||||
public class RoleApp : BaseStringApp<Role,OpenAuthDBContext>
|
public class RoleApp : SqlSugarBaseApp<Role>
|
||||||
{
|
{
|
||||||
private RevelanceManagerApp _revelanceApp;
|
private RevelanceManagerApp _revelanceApp;
|
||||||
|
|
||||||
@@ -39,7 +41,7 @@ namespace OpenAuth.App
|
|||||||
public async Task<PagedListDataResp<Role>> LoadAll(QueryRoleListReq request)
|
public async Task<PagedListDataResp<Role>> LoadAll(QueryRoleListReq request)
|
||||||
{
|
{
|
||||||
var result = new PagedListDataResp<Role>();
|
var result = new PagedListDataResp<Role>();
|
||||||
var objs = UnitWork.Find<Role>(null);
|
var objs = SugarClient.Queryable<Role>();
|
||||||
if (!string.IsNullOrEmpty(request.key))
|
if (!string.IsNullOrEmpty(request.key))
|
||||||
{
|
{
|
||||||
objs = objs.Where(u => u.Name.Contains(request.key));
|
objs = objs.Where(u => u.Name.Contains(request.key));
|
||||||
@@ -59,7 +61,7 @@ namespace OpenAuth.App
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public List<Role> LoadByIds(string[] ids)
|
public List<Role> LoadByIds(string[] ids)
|
||||||
{
|
{
|
||||||
return UnitWork.Find<Role>(u => ids.Contains(u.Id)).ToList();
|
return Repository.GetList(u => ids.Contains(u.Id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -68,12 +70,10 @@ namespace OpenAuth.App
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void Add(RoleView obj)
|
public void Add(RoleView obj)
|
||||||
{
|
{
|
||||||
UnitWork.ExecuteWithTransaction(() =>
|
SugarClient.Ado.BeginTran();
|
||||||
{
|
|
||||||
Role role = obj;
|
Role role = obj;
|
||||||
role.CreateTime = DateTime.Now;
|
role.CreateTime = DateTime.Now;
|
||||||
UnitWork.Add(role);
|
Repository.Insert(role);
|
||||||
UnitWork.Save();
|
|
||||||
obj.Id = role.Id; //要把保存后的ID存入view
|
obj.Id = role.Id; //要把保存后的ID存入view
|
||||||
|
|
||||||
//如果当前账号不是SYSTEM,则直接分配
|
//如果当前账号不是SYSTEM,则直接分配
|
||||||
@@ -87,22 +87,21 @@ namespace OpenAuth.App
|
|||||||
secIds = new[] {role.Id}
|
secIds = new[] {role.Id}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
SugarClient.Ado.CommitTran();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 删除角色时,需要删除角色对应的权限
|
/// 删除角色时,需要删除角色对应的权限
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ids"></param>
|
/// <param name="ids"></param>
|
||||||
public override void Delete(string[] ids)
|
public new void Delete(string[] ids)
|
||||||
{
|
{
|
||||||
UnitWork.ExecuteWithTransaction(() =>
|
SugarClient.Ado.BeginTran();
|
||||||
{
|
SugarClient.Deleteable<Relevance>().Where(u=>(u.RelKey == Define.ROLEMODULE || u.RelKey == Define.ROLEELEMENT) && ids.Contains(u.FirstId)).ExecuteCommand();
|
||||||
UnitWork.Delete<Relevance>(u=>(u.RelKey == Define.ROLEMODULE || u.RelKey == Define.ROLEELEMENT) && ids.Contains(u.FirstId));
|
SugarClient.Deleteable<Relevance>().Where(u=>u.RelKey == Define.USERROLE && ids.Contains(u.SecondId)).ExecuteCommand();
|
||||||
UnitWork.Delete<Relevance>(u=>u.RelKey == Define.USERROLE && ids.Contains(u.SecondId));
|
SugarClient.Deleteable<Role>().Where(u =>ids.Contains(u.Id)).ExecuteCommand();
|
||||||
UnitWork.Delete<Role>(u =>ids.Contains(u.Id));
|
SugarClient.Ado.CommitTran();
|
||||||
UnitWork.Save();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -111,19 +110,16 @@ namespace OpenAuth.App
|
|||||||
/// <param name="obj"></param>
|
/// <param name="obj"></param>
|
||||||
public void Update(RoleView obj)
|
public void Update(RoleView obj)
|
||||||
{
|
{
|
||||||
Role role = obj;
|
Repository.Update(u => new Role
|
||||||
|
|
||||||
UnitWork.Update<Role>(u => u.Id == obj.Id, u => new Role
|
|
||||||
{
|
{
|
||||||
Name = role.Name,
|
Name = obj.Name,
|
||||||
Status = role.Status
|
Status = obj.Status
|
||||||
});
|
}, u => u.Id == obj.Id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public RoleApp(IUnitWork<OpenAuthDBContext> unitWork, IRepository<Role,OpenAuthDBContext> repository,
|
public RoleApp(ISqlSugarClient client,
|
||||||
RevelanceManagerApp app,IAuth auth) : base(unitWork, repository, auth)
|
RevelanceManagerApp app,IAuth auth) : base(client, auth)
|
||||||
{
|
{
|
||||||
_revelanceApp = app;
|
_revelanceApp = app;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,21 +12,22 @@ using OpenAuth.App.Response;
|
|||||||
using OpenAuth.Repository;
|
using OpenAuth.Repository;
|
||||||
using OpenAuth.Repository.Domain;
|
using OpenAuth.Repository.Domain;
|
||||||
using OpenAuth.Repository.Interface;
|
using OpenAuth.Repository.Interface;
|
||||||
|
using SqlSugar;
|
||||||
namespace OpenAuth.App
|
namespace OpenAuth.App
|
||||||
{
|
{
|
||||||
public class UserManagerApp : BaseStringApp<SysUser,OpenAuthDBContext>
|
public class UserManagerApp : SqlSugarBaseApp<SysUser>
|
||||||
{
|
{
|
||||||
private RevelanceManagerApp _revelanceApp;
|
private RevelanceManagerApp _revelanceApp;
|
||||||
private OrgManagerApp _orgManagerApp;
|
private OrgManagerApp _orgManagerApp;
|
||||||
public UserManagerApp(IUnitWork<OpenAuthDBContext> unitWork, IRepository<SysUser,OpenAuthDBContext> repository,
|
public UserManagerApp(ISqlSugarClient client,
|
||||||
RevelanceManagerApp app,IAuth auth, OrgManagerApp orgManagerApp) : base(unitWork, repository, auth)
|
RevelanceManagerApp app, IAuth auth, OrgManagerApp orgManagerApp) : base(client, auth)
|
||||||
{
|
{
|
||||||
_revelanceApp = app;
|
_revelanceApp = app;
|
||||||
_orgManagerApp = orgManagerApp;
|
_orgManagerApp = orgManagerApp;
|
||||||
}
|
}
|
||||||
public SysUser GetByAccount(string account)
|
public SysUser GetByAccount(string account)
|
||||||
{
|
{
|
||||||
return Repository.FirstOrDefault(u => u.Account == account);
|
return SugarClient.Queryable<SysUser>().First(u => u.Account == account);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 加载当前登录用户可访问的一个部门及子部门全部用户
|
/// 加载当前登录用户可访问的一个部门及子部门全部用户
|
||||||
@@ -35,40 +36,16 @@ namespace OpenAuth.App
|
|||||||
public async Task<PagedDynamicDataResp> Load(QueryUserListReq request)
|
public async Task<PagedDynamicDataResp> Load(QueryUserListReq request)
|
||||||
{
|
{
|
||||||
var loginUser = _auth.GetCurrentUser();
|
var loginUser = _auth.GetCurrentUser();
|
||||||
IQueryable<SysUser> query = UnitWork.Find<SysUser>(null);
|
var query = SugarClient.Queryable<SysUser>();
|
||||||
if (!string.IsNullOrEmpty(request.key))
|
if (!string.IsNullOrEmpty(request.key))
|
||||||
{
|
{
|
||||||
query = UnitWork.Find<SysUser>(u => u.Name.Contains(request.key) || u.Account.Contains(request.key));
|
query = SugarClient.Queryable<SysUser>().Where(u => u.Name.Contains(request.key) || u.Account.Contains(request.key));
|
||||||
}
|
}
|
||||||
var userOrgs = from user in query
|
var userOrgs = query
|
||||||
join user2 in UnitWork.Find<SysUser>(null)
|
.LeftJoin<SysUser>((user, u) => user.ParentId == u.Id)
|
||||||
on user.ParentId equals user2.Id into tempuser
|
.LeftJoin<Relevance>((user, u, r) => user.Id == r.FirstId && r.RelKey == Define.USERORG)
|
||||||
from u in tempuser.DefaultIfEmpty()
|
.LeftJoin<SysOrg>((user, u, r, o) => r.SecondId == o.Id);
|
||||||
join relevance in UnitWork.Find<Relevance>(u => u.RelKey == "UserOrg")
|
|
||||||
on user.Id equals relevance.FirstId into temp
|
|
||||||
from r in temp.DefaultIfEmpty()
|
|
||||||
join org in UnitWork.Find<SysOrg>(null)
|
|
||||||
on r.SecondId equals org.Id into orgtmp
|
|
||||||
from o in orgtmp.DefaultIfEmpty()
|
|
||||||
select new
|
|
||||||
{
|
|
||||||
user.Account,
|
|
||||||
user.Name,
|
|
||||||
user.Id,
|
|
||||||
user.Sex,
|
|
||||||
user.Status,
|
|
||||||
user.BizCode,
|
|
||||||
user.CreateId,
|
|
||||||
user.CreateTime,
|
|
||||||
user.TypeId,
|
|
||||||
user.TypeName,
|
|
||||||
user.ParentId,
|
|
||||||
ParentName = u.Name, //直属上级
|
|
||||||
Key = r.RelKey,
|
|
||||||
r.SecondId,
|
|
||||||
OrgId = o.Id,
|
|
||||||
OrgName = o.Name
|
|
||||||
};
|
|
||||||
//如果请求的orgId不为空
|
//如果请求的orgId不为空
|
||||||
if (!string.IsNullOrEmpty(request.orgId))
|
if (!string.IsNullOrEmpty(request.orgId))
|
||||||
{
|
{
|
||||||
@@ -76,16 +53,34 @@ namespace OpenAuth.App
|
|||||||
var cascadeId = org.CascadeId;
|
var cascadeId = org.CascadeId;
|
||||||
var orgIds = loginUser.Orgs.Where(u => u.CascadeId.Contains(cascadeId)).Select(u => u.Id).ToArray();
|
var orgIds = loginUser.Orgs.Where(u => u.CascadeId.Contains(cascadeId)).Select(u => u.Id).ToArray();
|
||||||
//只获取机构里面的用户
|
//只获取机构里面的用户
|
||||||
userOrgs = userOrgs.Where(u => u.Key == Define.USERORG && orgIds.Contains(u.OrgId));
|
userOrgs = userOrgs.Where((user,u,r,o) => r.RelKey == Define.USERORG && orgIds.Contains(o.Id));
|
||||||
}
|
}
|
||||||
else //todo:如果请求的orgId为空,即为跟节点,这时可以额外获取到机构已经被删除的用户,从而进行机构分配。可以根据自己需求进行调整
|
else //todo:如果请求的orgId为空,即为跟节点,这时可以额外获取到机构已经被删除的用户,从而进行机构分配。可以根据自己需求进行调整
|
||||||
{
|
{
|
||||||
var orgIds = loginUser.Orgs.Select(u => u.Id).ToArray();
|
var orgIds = loginUser.Orgs.Select(u => u.Id).ToArray();
|
||||||
//获取用户可以访问的机构的用户和没有任何机构关联的用户(机构被删除后,没有删除这里面的关联关系)
|
//获取用户可以访问的机构的用户和没有任何机构关联的用户(机构被删除后,没有删除这里面的关联关系)
|
||||||
userOrgs = userOrgs.Where(u => (u.Key == Define.USERORG && orgIds.Contains(u.OrgId)) || (u.OrgId == null));
|
userOrgs = userOrgs.Where((user,u,r,o) => (r.RelKey == Define.USERORG && orgIds.Contains(o.Id)) || (o == null));
|
||||||
}
|
}
|
||||||
var userViews = (await userOrgs.ToListAsync()).GroupBy(b => b.Account)
|
|
||||||
.Select(u =>new UserView
|
var userOrgs2 = userOrgs.Select((user, u, r, o) => new {
|
||||||
|
Account = user.Account,
|
||||||
|
Name = user.Name,
|
||||||
|
Id = user.Id,
|
||||||
|
Sex = user.Sex,
|
||||||
|
Status = user.Status,
|
||||||
|
BizCode = user.BizCode,
|
||||||
|
CreateId = user.CreateId,
|
||||||
|
CreateTime = user.CreateTime,
|
||||||
|
TypeId = user.TypeId,
|
||||||
|
TypeName = user.TypeName,
|
||||||
|
ParentId = user.ParentId,
|
||||||
|
ParentName = u.Name,
|
||||||
|
Key = r.RelKey,
|
||||||
|
OrgId = o.Id,
|
||||||
|
OrgName = o.Name
|
||||||
|
});
|
||||||
|
var userViews = (await userOrgs2.ToListAsync()).GroupBy(b => b.Account)
|
||||||
|
.Select(u => new UserView
|
||||||
{
|
{
|
||||||
Id = u.First().Id,
|
Id = u.First().Id,
|
||||||
Account = u.Key,
|
Account = u.Key,
|
||||||
@@ -96,13 +91,14 @@ namespace OpenAuth.App
|
|||||||
ParentId = u.First().ParentId,
|
ParentId = u.First().ParentId,
|
||||||
CreateTime = u.First().CreateTime,
|
CreateTime = u.First().CreateTime,
|
||||||
CreateUser = u.First().CreateId,
|
CreateUser = u.First().CreateId,
|
||||||
OrganizationIds = string.Join(",", u.Select(x=>x.OrgId))
|
OrganizationIds = string.Join(",", u.Select(x => x.OrgId))
|
||||||
,Organizations = string.Join(",", u.Select(x=>x.OrgName))
|
,
|
||||||
|
Organizations = string.Join(",", u.Select(x => x.OrgName))
|
||||||
});
|
});
|
||||||
return new PagedDynamicDataResp
|
return new PagedDynamicDataResp
|
||||||
{
|
{
|
||||||
Count =userViews.Count(),
|
Count = userViews.Count(),
|
||||||
Data =userViews.OrderBy(u => u.Name)
|
Data = userViews.OrderBy(u => u.Name)
|
||||||
.Skip((request.page - 1) * request.limit)
|
.Skip((request.page - 1) * request.limit)
|
||||||
.Take(request.limit),
|
.Take(request.limit),
|
||||||
};
|
};
|
||||||
@@ -113,46 +109,39 @@ namespace OpenAuth.App
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public async Task<PagedListDataResp<UserView>> LoadAll(QueryUserListReq request)
|
public async Task<PagedListDataResp<UserView>> LoadAll(QueryUserListReq request)
|
||||||
{
|
{
|
||||||
IQueryable<SysUser> query = UnitWork.Find<SysUser>(null);
|
var query = SugarClient.Queryable<SysUser>();
|
||||||
if (!string.IsNullOrEmpty(request.key))
|
if (!string.IsNullOrEmpty(request.key))
|
||||||
{
|
{
|
||||||
query = UnitWork.Find<SysUser>(u => u.Name.Contains(request.key) || u.Account.Contains(request.key));
|
query = SugarClient.Queryable<SysUser>().Where(u => u.Name.Contains(request.key) || u.Account.Contains(request.key));
|
||||||
}
|
}
|
||||||
var userOrgs = from user in query
|
var userOrgs = query
|
||||||
join user2 in UnitWork.Find<SysUser>(null)
|
.LeftJoin<SysUser>((user, u) => user.ParentId == u.Id)
|
||||||
on user.ParentId equals user2.Id into tempuser
|
.LeftJoin<Relevance>((user, u, r) => user.Id == r.FirstId && r.RelKey == Define.USERORG)
|
||||||
from u in tempuser.DefaultIfEmpty()
|
.LeftJoin<SysOrg>((user, u, r, o) => r.SecondId == o.Id);
|
||||||
join relevance in UnitWork.Find<Relevance>(u => u.RelKey == "UserOrg")
|
|
||||||
on user.Id equals relevance.FirstId into temp
|
|
||||||
from r in temp.DefaultIfEmpty()
|
|
||||||
join org in UnitWork.Find<SysOrg>(null)
|
|
||||||
on r.SecondId equals org.Id into orgtmp
|
|
||||||
from o in orgtmp.DefaultIfEmpty()
|
|
||||||
select new
|
|
||||||
{
|
|
||||||
user.Account,
|
|
||||||
user.Name,
|
|
||||||
user.Id,
|
|
||||||
user.Sex,
|
|
||||||
user.Status,
|
|
||||||
user.BizCode,
|
|
||||||
user.CreateId,
|
|
||||||
user.CreateTime,
|
|
||||||
user.TypeId,
|
|
||||||
user.TypeName,
|
|
||||||
user.ParentId,
|
|
||||||
ParentName = u.Name, //直属上级
|
|
||||||
Key = r.RelKey,
|
|
||||||
r.SecondId,
|
|
||||||
OrgId = o.Id,
|
|
||||||
OrgName = o.Name
|
|
||||||
};
|
|
||||||
//如果请求的orgId不为空
|
//如果请求的orgId不为空
|
||||||
if (!string.IsNullOrEmpty(request.orgId))
|
if (!string.IsNullOrEmpty(request.orgId))
|
||||||
{
|
{
|
||||||
userOrgs = userOrgs.Where(u => u.Key == Define.USERORG && u.OrgId == request.orgId);
|
userOrgs = userOrgs.Where((user,u,r,o) => r.RelKey == Define.USERORG && o.Id == request.orgId);
|
||||||
}
|
}
|
||||||
var userViews = (await userOrgs.ToListAsync()).GroupBy(b => b.Account).Select(u =>new UserView
|
|
||||||
|
var userOrgs2 = userOrgs.Select((user, u, r, o) => new {
|
||||||
|
Account = user.Account,
|
||||||
|
Name = user.Name,
|
||||||
|
Id = user.Id,
|
||||||
|
Sex = user.Sex,
|
||||||
|
Status = user.Status,
|
||||||
|
BizCode = user.BizCode,
|
||||||
|
CreateId = user.CreateId,
|
||||||
|
CreateTime = user.CreateTime,
|
||||||
|
TypeId = user.TypeId,
|
||||||
|
TypeName = user.TypeName,
|
||||||
|
ParentId = user.ParentId,
|
||||||
|
ParentName = u.Name,
|
||||||
|
Key = r.RelKey,
|
||||||
|
OrgId = o.Id,
|
||||||
|
OrgName = o.Name
|
||||||
|
});
|
||||||
|
var userViews = (await userOrgs2.ToListAsync()).GroupBy(b => b.Account).Select(u => new UserView
|
||||||
{
|
{
|
||||||
Id = u.First().Id,
|
Id = u.First().Id,
|
||||||
Account = u.Key,
|
Account = u.Key,
|
||||||
@@ -163,8 +152,9 @@ namespace OpenAuth.App
|
|||||||
CreateUser = u.First().CreateId,
|
CreateUser = u.First().CreateId,
|
||||||
ParentName = u.First().ParentName,
|
ParentName = u.First().ParentName,
|
||||||
ParentId = u.First().ParentId,
|
ParentId = u.First().ParentId,
|
||||||
OrganizationIds = string.Join(",", u.Select(x=>x.OrgId))
|
OrganizationIds = string.Join(",", u.Select(x => x.OrgId))
|
||||||
,Organizations = string.Join(",", u.Select(x=>x.OrgName))
|
,
|
||||||
|
Organizations = string.Join(",", u.Select(x => x.OrgName))
|
||||||
});
|
});
|
||||||
return new PagedListDataResp<UserView>()
|
return new PagedListDataResp<UserView>()
|
||||||
{
|
{
|
||||||
@@ -176,16 +166,15 @@ namespace OpenAuth.App
|
|||||||
}
|
}
|
||||||
public void AddOrUpdate(UpdateUserReq request)
|
public void AddOrUpdate(UpdateUserReq request)
|
||||||
{
|
{
|
||||||
request.ValidationEntity(u => new {u.Account,u.Name, u.OrganizationIds});
|
request.ValidationEntity(u => new { u.Account, u.Name, u.OrganizationIds });
|
||||||
if (string.IsNullOrEmpty(request.OrganizationIds))
|
if (string.IsNullOrEmpty(request.OrganizationIds))
|
||||||
throw new Exception("请为用户分配机构");
|
throw new Exception("请为用户分配机构");
|
||||||
SysUser requser = request;
|
SysUser requser = request;
|
||||||
requser.CreateId = _auth.GetCurrentUser().User.Id;
|
requser.CreateId = _auth.GetCurrentUser().User.Id;
|
||||||
UnitWork.ExecuteWithTransaction(() =>
|
SugarClient.Ado.BeginTran();
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(request.Id))
|
if (string.IsNullOrEmpty(request.Id))
|
||||||
{
|
{
|
||||||
if (UnitWork.Any<SysUser>(u => u.Account == request.Account))
|
if (SugarClient.Queryable<SysUser>().Any(u => u.Account == request.Account))
|
||||||
{
|
{
|
||||||
throw new Exception("用户账号已存在");
|
throw new Exception("用户账号已存在");
|
||||||
}
|
}
|
||||||
@@ -194,12 +183,12 @@ namespace OpenAuth.App
|
|||||||
requser.Password = requser.Account; //如果客户端没提供密码,默认密码同账号
|
requser.Password = requser.Account; //如果客户端没提供密码,默认密码同账号
|
||||||
}
|
}
|
||||||
requser.CreateTime = DateTime.Now;
|
requser.CreateTime = DateTime.Now;
|
||||||
UnitWork.Add(requser);
|
Repository.Insert(requser);
|
||||||
request.Id = requser.Id; //要把保存后的ID存入view
|
request.Id = requser.Id; //要把保存后的ID存入view
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
UnitWork.Update<SysUser>(u => u.Id == request.Id, u => new SysUser
|
Repository.Update(u => new SysUser
|
||||||
{
|
{
|
||||||
Account = requser.Account,
|
Account = requser.Account,
|
||||||
BizCode = requser.BizCode,
|
BizCode = requser.BizCode,
|
||||||
@@ -207,34 +196,32 @@ namespace OpenAuth.App
|
|||||||
Sex = requser.Sex,
|
Sex = requser.Sex,
|
||||||
Status = requser.Status,
|
Status = requser.Status,
|
||||||
ParentId = request.ParentId
|
ParentId = request.ParentId
|
||||||
});
|
},u => u.Id == request.Id);
|
||||||
if (!string.IsNullOrEmpty(requser.Password)) //密码为空的时候,不做修改
|
if (!string.IsNullOrEmpty(requser.Password)) //密码为空的时候,不做修改
|
||||||
{
|
{
|
||||||
UnitWork.Update<SysUser>(u => u.Id == request.Id, u => new SysUser
|
Repository.Update(u => new SysUser
|
||||||
{
|
{
|
||||||
Password = requser.Password
|
Password = requser.Password
|
||||||
});
|
},u => u.Id == request.Id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UnitWork.Save();
|
|
||||||
string[] orgIds = request.OrganizationIds.Split(',').ToArray();
|
string[] orgIds = request.OrganizationIds.Split(',').ToArray();
|
||||||
_revelanceApp.DeleteBy(Define.USERORG, requser.Id);
|
_revelanceApp.DeleteBy(Define.USERORG, requser.Id);
|
||||||
_revelanceApp.Assign(Define.USERORG, orgIds.ToLookup(u => requser.Id));
|
_revelanceApp.Assign(Define.USERORG, orgIds.ToLookup(u => requser.Id));
|
||||||
});
|
|
||||||
|
SugarClient.Ado.CommitTran();
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 删除用户,包含用户与组织关系、用户与角色关系
|
/// 删除用户,包含用户与组织关系、用户与角色关系
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="ids"></param>
|
/// <param name="ids"></param>
|
||||||
public override void Delete(string[] ids)
|
public new void Delete(string[] ids)
|
||||||
{
|
{
|
||||||
UnitWork.ExecuteWithTransaction(() =>
|
SugarClient.Ado.BeginTran();
|
||||||
{
|
SugarClient.Deleteable<Relevance>().Where(u => (u.RelKey == Define.USERROLE || u.RelKey == Define.USERORG)
|
||||||
UnitWork.Delete<Relevance>(u =>(u.RelKey == Define.USERROLE || u.RelKey == Define.USERORG)
|
&& ids.Contains(u.FirstId)).ExecuteCommand();
|
||||||
&& ids.Contains(u.FirstId));
|
SugarClient.Deleteable<SysUser>().Where(u => ids.Contains(u.Id)).ExecuteCommand();
|
||||||
UnitWork.Delete<SysUser>(u => ids.Contains(u.Id));
|
SugarClient.Ado.CommitTran();
|
||||||
UnitWork.Save();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 修改密码
|
/// 修改密码
|
||||||
@@ -242,10 +229,10 @@ namespace OpenAuth.App
|
|||||||
/// <param name="request"></param>
|
/// <param name="request"></param>
|
||||||
public void ChangePassword(ChangePasswordReq request)
|
public void ChangePassword(ChangePasswordReq request)
|
||||||
{
|
{
|
||||||
Repository.Update(u => u.Account == request.Account, user => new SysUser
|
Repository.Update(u => new SysUser
|
||||||
{
|
{
|
||||||
Password = request.Password
|
Password = request.Password
|
||||||
});
|
},u => u.Account == request.Account);
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取指定角色包含的用户列表
|
/// 获取指定角色包含的用户列表
|
||||||
@@ -254,15 +241,15 @@ namespace OpenAuth.App
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<PagedDynamicDataResp> LoadByRole(QueryUserListByRoleReq request)
|
public async Task<PagedDynamicDataResp> LoadByRole(QueryUserListByRoleReq request)
|
||||||
{
|
{
|
||||||
var users = from userRole in UnitWork.Find<Relevance>(u =>
|
var users = SugarClient.Queryable<Relevance>()
|
||||||
u.SecondId == request.roleId && u.RelKey == Define.USERROLE)
|
.Where(u => u.SecondId == request.roleId && u.RelKey == Define.USERROLE)
|
||||||
join user in UnitWork.Find<SysUser>(null) on userRole.FirstId equals user.Id into temp
|
.LeftJoin<SysUser>((userRole, user) => userRole.FirstId == user.Id)
|
||||||
from c in temp.Where(u =>u.Id != null)
|
.Where((userRole, user) => user.Id != null)
|
||||||
select c;
|
.Select((userRole, user) => user);
|
||||||
return new PagedDynamicDataResp
|
return new PagedDynamicDataResp
|
||||||
{
|
{
|
||||||
Count =await users.CountAsync(),
|
Count = await users.CountAsync(),
|
||||||
Data =await users.Skip((request.page - 1) * request.limit).Take(request.limit).ToListAsync()
|
Data = await users.Skip((request.page - 1) * request.limit).Take(request.limit).ToListAsync()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -272,15 +259,15 @@ namespace OpenAuth.App
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public async Task<PagedDynamicDataResp> LoadByOrg(QueryUserListByOrgReq request)
|
public async Task<PagedDynamicDataResp> LoadByOrg(QueryUserListByOrgReq request)
|
||||||
{
|
{
|
||||||
var users = from userOrg in UnitWork.Find<Relevance>(u =>
|
var users = SugarClient.Queryable<Relevance>()
|
||||||
u.SecondId == request.orgId && u.RelKey == Define.USERORG)
|
.Where(u => u.SecondId == request.orgId && u.RelKey == Define.USERORG)
|
||||||
join user in UnitWork.Find<SysUser>(null) on userOrg.FirstId equals user.Id into temp
|
.LeftJoin<SysUser>((userOrg, user) => userOrg.FirstId == user.Id)
|
||||||
from c in temp.Where(u =>u.Id != null)
|
.Where((userOrg, user) => user.Id != null)
|
||||||
select c;
|
.Select((userOrg, user) => user);
|
||||||
return new PagedDynamicDataResp
|
return new PagedDynamicDataResp
|
||||||
{
|
{
|
||||||
Count =await users.CountAsync(),
|
Count = await users.CountAsync(),
|
||||||
Data =await users.Skip((request.page - 1) * request.limit).Take(request.limit).ToListAsync()
|
Data = await users.Skip((request.page - 1) * request.limit).Take(request.limit).ToListAsync()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -293,11 +280,11 @@ namespace OpenAuth.App
|
|||||||
{
|
{
|
||||||
throw new Exception("不能修改超级管理员信息");
|
throw new Exception("不能修改超级管理员信息");
|
||||||
}
|
}
|
||||||
Repository.Update(u => u.Account == request.Account, user => new SysUser
|
Repository.Update(u => new SysUser
|
||||||
{
|
{
|
||||||
Name = request.Name,
|
Name = request.Name,
|
||||||
Sex = request.Sex
|
Sex = request.Sex
|
||||||
});
|
},u => u.Account == request.Account);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -311,7 +298,7 @@ namespace OpenAuth.App
|
|||||||
{
|
{
|
||||||
throw new Exception("超级管理员没有直属上级,请检查配置");
|
throw new Exception("超级管理员没有直属上级,请检查配置");
|
||||||
}
|
}
|
||||||
return Repository.FirstOrDefault(u => u.Id == userid).ParentId;
|
return SugarClient.Queryable<SysUser>().First(u => u.Id == userid).ParentId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -337,23 +324,19 @@ namespace OpenAuth.App
|
|||||||
where RelKey = '{Define.INSTANCE_NOTICE_ROLE}'
|
where RelKey = '{Define.INSTANCE_NOTICE_ROLE}'
|
||||||
and FirstId = '{instanceId}') b on a.SecondId = b.RoleId
|
and FirstId = '{instanceId}') b on a.SecondId = b.RoleId
|
||||||
where RelKey = 'UserRole') userids on u.Id = userids.UserId";
|
where RelKey = 'UserRole') userids on u.Id = userids.UserId";
|
||||||
var users = UnitWork.FromSql<SysUser>(sql);
|
var users = SugarClient.Ado.SqlQuery<SysUser>(sql);
|
||||||
return users.Select(u=>u.Id).ToList();
|
return users.Select(u => u.Id).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<UserView> LoadByIds(string[] ids)
|
public List<UserView> LoadByIds(string[] ids)
|
||||||
{
|
{
|
||||||
var users = Repository.Find(u => ids.Contains(u.Id));
|
var users = SugarClient.Queryable<SysUser>().Where(u => ids.Contains(u.Id));
|
||||||
|
|
||||||
//获取用户及用户关联的机构
|
//获取用户及用户关联的机构
|
||||||
var userOrgs = from user in users
|
var userOrgs = users
|
||||||
join relevance in UnitWork.Find<Relevance>(u => u.RelKey == "UserOrg")
|
.LeftJoin<Relevance>((user, r) => user.Id == r.FirstId && r.RelKey == Define.USERORG)
|
||||||
on user.Id equals relevance.FirstId into temp
|
.LeftJoin<SysOrg>((user, r, o) => r.SecondId == o.Id)
|
||||||
from r in temp.DefaultIfEmpty()
|
.Select((user, r, o) => new
|
||||||
join org in UnitWork.Find<SysOrg>(null)
|
|
||||||
on r.SecondId equals org.Id into orgtmp
|
|
||||||
from o in orgtmp.DefaultIfEmpty()
|
|
||||||
select new
|
|
||||||
{
|
{
|
||||||
user.Id,
|
user.Id,
|
||||||
user.Account,
|
user.Account,
|
||||||
@@ -365,21 +348,22 @@ namespace OpenAuth.App
|
|||||||
user.ParentId,
|
user.ParentId,
|
||||||
OrgId = o.Id,
|
OrgId = o.Id,
|
||||||
OrgName = o.Name
|
OrgName = o.Name
|
||||||
};
|
});
|
||||||
|
|
||||||
var userViews = userOrgs.GroupBy(b => b.Account).Select(u => new UserView
|
var userOrgsList = userOrgs.ToList(); // 先执行ToList()
|
||||||
|
var userViews = userOrgsList.GroupBy(b => b.Account).Select(g => new UserView
|
||||||
{
|
{
|
||||||
Id = u.First().Id,
|
Id = g.First().Id,
|
||||||
Account = u.Key,
|
Account = g.Key,
|
||||||
Name = u.First().Name,
|
Name = g.First().Name,
|
||||||
Sex = u.First().Sex,
|
Sex = g.First().Sex,
|
||||||
Status = u.First().Status,
|
Status = g.First().Status,
|
||||||
CreateTime = u.First().CreateTime,
|
CreateTime = g.First().CreateTime,
|
||||||
CreateUser = u.First().CreateId,
|
CreateUser = g.First().CreateId,
|
||||||
ParentName = u.First().ParentId,
|
ParentName = g.First().ParentId,
|
||||||
ParentId = u.First().ParentId,
|
ParentId = g.First().ParentId,
|
||||||
OrganizationIds = string.Join(",", u.Select(x=>x.OrgId))
|
OrganizationIds = string.Join(",", g.Select(x => x.OrgId)),
|
||||||
,Organizations = string.Join(",", u.Select(x=>x.OrgName))
|
Organizations = string.Join(",", g.Select(x => x.OrgName))
|
||||||
});
|
});
|
||||||
|
|
||||||
return userViews.ToList();
|
return userViews.ToList();
|
||||||
|
|||||||
Reference in New Issue
Block a user