fix issue #I80UEX 部门增加职位及部门负责人

This commit is contained in:
wintel 2023-12-18 23:22:05 +08:00
parent 88c1108ac2
commit 30256db076
4 changed files with 75 additions and 1 deletions

View File

@ -36,6 +36,19 @@
public const string ALL_USER = "ALL_USER"; //所有用户
public const string SPECIAL_ROLE = "SPECIAL_ROLE"; //指定角色
public const string SPECIAL_USER = "SPECIAL_USER"; //指定用户
/// <summary>
/// 连续多级直属上级
/// <para>不同于钉钉的各上级部门负责人审批OpenAuth以用户的各级直属上级审批模式</para>
/// </summary>
public const string RUNTIME_MANY_PARENTS = "RUNTIME_MANY_PARENTS";
/// <summary>
/// 部门负责人
/// </summary>
public const string RUNTIME_CHAIRMAN = "RUNTIME_CHAIRMAN";
/// <summary>
/// 发起人直属上级
/// </summary>
public const string RUNTIME_PARENT = "RUNTIME_PARENT";
public const string RUNTIME_SPECIAL_ROLE = "RUNTIME_SPECIAL_ROLE"; //运行时指定角色
public const string RUNTIME_SPECIAL_USER = "RUNTIME_SPECIAL_USER"; //运行时指定用户

View File

@ -47,12 +47,14 @@ namespace OpenAuth.App
private IServiceProvider _serviceProvider;
private SysMessageApp _messageApp;
private DbExtension _dbExtension;
private UserManagerApp _userManagerApp;
private OrgManagerApp _orgManagerApp;
public FlowInstanceApp(IUnitWork<OpenAuthDBContext> unitWork,
IRepository<FlowInstance, OpenAuthDBContext> repository
, RevelanceManagerApp app, FlowSchemeApp flowSchemeApp, FormApp formApp,
IHttpClientFactory httpClientFactory, IAuth auth, IServiceProvider serviceProvider,
SysMessageApp messageApp, DbExtension dbExtension)
SysMessageApp messageApp, DbExtension dbExtension, UserManagerApp userManagerApp, OrgManagerApp orgManagerApp)
: base(unitWork, repository, auth)
{
_revelanceApp = app;
@ -62,6 +64,8 @@ namespace OpenAuth.App
_serviceProvider = serviceProvider;
_messageApp = messageApp;
_dbExtension = dbExtension;
_userManagerApp = userManagerApp;
_orgManagerApp = orgManagerApp;
}
#region API
@ -115,7 +119,10 @@ namespace OpenAuth.App
flowInstance.ActivityName = wfruntime.nextNode.name;
flowInstance.PreviousId = wfruntime.currentNodeId;
flowInstance.CreateUserId = user.User.Id;
addFlowInstanceReq.CreateUserId = user.User.Id;
flowInstance.CreateUserName = user.User.Account;
addFlowInstanceReq.CreateUserName = user.User.Account;
flowInstance.MakerList =
(wfruntime.GetNextNodeType() != 4 ? GetNextMakers(wfruntime, addFlowInstanceReq) : "");
flowInstance.IsFinish = (wfruntime.GetNextNodeType() == 4
@ -572,6 +579,41 @@ namespace OpenAuth.App
makerList = GenericHelpers.ArrayToString(request.NodeDesignates, makerList);
}
else if (wfruntime.nextNode.setInfo.NodeDesignate == Setinfo.RUNTIME_PARENT)
{
//如果是发起人直属上级
if (wfruntime.nextNode.setInfo.NodeDesignate != request.NodeDesignateType)
{
throw new Exception("前端提交的节点权限类型异常,请检查流程");
}
string createUserId = string.Empty;
if (wfruntime.currentNode.type == FlowNode.START) //如果是创建流程
{
var user = _auth.GetCurrentUser().User;
createUserId = user.Id;
}
else //如果是审批
{
FlowInstance flowInstance = Get(wfruntime.flowInstanceId);
createUserId = flowInstance.CreateUserId;
}
var parentId = _userManagerApp.GetParent(createUserId);
makerList = GenericHelpers.ArrayToString(new[]{parentId}, makerList);
}
else if (wfruntime.nextNode.setInfo.NodeDesignate == Setinfo.RUNTIME_CHAIRMAN)
{
//如果是发起人的部门负责人
if (wfruntime.nextNode.setInfo.NodeDesignate != request.NodeDesignateType)
{
throw new Exception("前端提交的节点权限类型异常,请检查流程");
}
FlowInstance flowInstance = Get(wfruntime.flowInstanceId);
var chairmanIds = _orgManagerApp.GetChairmanId(wfruntime.nextNode.setInfo.NodeDesignateData.orgs);
makerList = GenericHelpers.ArrayToString(chairmanIds, makerList);
}
else
{
makerList = GetNodeMarkers(wfruntime.nextNode);

View File

@ -95,5 +95,10 @@ namespace OpenAuth.App
{
_revelanceApp = revelanceApp;
}
public string[] GetChairmanId(string[] orgIds)
{
return Repository.Find(u => orgIds.Contains(u.Id)&&u.ChairmanId!= null).Select(u => u.ChairmanId).ToArray();
}
}
}

View File

@ -287,5 +287,19 @@ namespace OpenAuth.App
Sex = request.Sex
});
}
/// <summary>
/// 获取用户的直属上级ID
/// </summary>
/// <param name="userid">用户ID</param>
/// <returns></returns>
public string GetParent(string userid)
{
if (userid == Guid.Empty.ToString())
{
throw new Exception("超级管理员没有直属上级,请检查配置");
}
return Repository.FirstOrDefault(u => u.Id == userid).ParentId;
}
}
}