From 30256db0768546d0d1828978ca29164eb235e385 Mon Sep 17 00:00:00 2001 From: wintel Date: Mon, 18 Dec 2023 23:22:05 +0800 Subject: [PATCH] =?UTF-8?q?fix=20issue=20#I80UEX=20=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E8=81=8C=E4=BD=8D=E5=8F=8A=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E8=B4=9F=E8=B4=A3=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.App/Flow/FlowNode.cs | 13 ++++++ OpenAuth.App/FlowInstance/FlowInstanceApp.cs | 44 +++++++++++++++++++- OpenAuth.App/OrgManager/OrgManagerApp.cs | 5 +++ OpenAuth.App/UserManager/UserManagerApp.cs | 14 +++++++ 4 files changed, 75 insertions(+), 1 deletion(-) diff --git a/OpenAuth.App/Flow/FlowNode.cs b/OpenAuth.App/Flow/FlowNode.cs index f1859d71..44d6073c 100644 --- a/OpenAuth.App/Flow/FlowNode.cs +++ b/OpenAuth.App/Flow/FlowNode.cs @@ -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"; //指定用户 + /// + /// 连续多级直属上级 + /// 不同于钉钉的各上级部门负责人审批,OpenAuth以用户的各级直属上级审批模式 + /// + public const string RUNTIME_MANY_PARENTS = "RUNTIME_MANY_PARENTS"; + /// + /// 部门负责人 + /// + public const string RUNTIME_CHAIRMAN = "RUNTIME_CHAIRMAN"; + /// + /// 发起人直属上级 + /// + 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"; //运行时指定用户 diff --git a/OpenAuth.App/FlowInstance/FlowInstanceApp.cs b/OpenAuth.App/FlowInstance/FlowInstanceApp.cs index ad0a3c50..1c405166 100644 --- a/OpenAuth.App/FlowInstance/FlowInstanceApp.cs +++ b/OpenAuth.App/FlowInstance/FlowInstanceApp.cs @@ -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 unitWork, IRepository 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); diff --git a/OpenAuth.App/OrgManager/OrgManagerApp.cs b/OpenAuth.App/OrgManager/OrgManagerApp.cs index ecd782c1..515c1a44 100644 --- a/OpenAuth.App/OrgManager/OrgManagerApp.cs +++ b/OpenAuth.App/OrgManager/OrgManagerApp.cs @@ -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(); + } } } \ No newline at end of file diff --git a/OpenAuth.App/UserManager/UserManagerApp.cs b/OpenAuth.App/UserManager/UserManagerApp.cs index c8f04df2..eeaaf19a 100644 --- a/OpenAuth.App/UserManager/UserManagerApp.cs +++ b/OpenAuth.App/UserManager/UserManagerApp.cs @@ -287,5 +287,19 @@ namespace OpenAuth.App Sex = request.Sex }); } + + /// + /// 获取用户的直属上级ID + /// + /// 用户ID + /// + public string GetParent(string userid) + { + if (userid == Guid.Empty.ToString()) + { + throw new Exception("超级管理员没有直属上级,请检查配置"); + } + return Repository.FirstOrDefault(u => u.Id == userid).ParentId; + } } } \ No newline at end of file