From 3eb94d7f215acd7c764d30384d6f1429b2dd33e6 Mon Sep 17 00:00:00 2001 From: wintel Date: Thu, 17 Apr 2025 23:37:50 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=86=E7=A6=BB=E4=BC=9A=E7=AD=BE?= =?UTF-8?q?=E5=92=8C=E7=BD=91=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OpenAuth.App/Flow/FlowRuntime.cs | 66 +++++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 1 deletion(-) diff --git a/OpenAuth.App/Flow/FlowRuntime.cs b/OpenAuth.App/Flow/FlowRuntime.cs index f07e6973..79ea9db1 100644 --- a/OpenAuth.App/Flow/FlowRuntime.cs +++ b/OpenAuth.App/Flow/FlowRuntime.cs @@ -40,7 +40,8 @@ namespace OpenAuth.App.Flow flowInstanceId = instance.Id; //网关开始节点和流程结束节点没有下一步 - if (GetCurrentNodeType() == Define.NODE_TYPE_FORK || GetCurrentNodeType() == Define.NODE_TYPE_END) + if (GetCurrentNodeType() == Define.NODE_TYPE_FORK + || GetCurrentNodeType() == Define.NODE_TYPE_END) { nextNodeId = "-1"; } @@ -618,6 +619,10 @@ namespace OpenAuth.App.Flow { makerList = GetForkNodeMakers(nextNodeId); } + else if (GetNextNodeType() == Define.NODE_TYPE_MULTI_INSTANCE) //如果是多实例、会签节点 + { + makerList = GetMultiInstanceNodeMakers(nextNodeId); + } else if (nextNode.setInfo.NodeDesignate == Define.RUNTIME_SPECIAL_ROLE) { //如果是运行时指定角色 @@ -698,6 +703,65 @@ namespace OpenAuth.App.Flow return makerList; } + /// + /// 计算多实例、会签节点的执行人 + /// + /// + /// + private string GetMultiInstanceNodeMakers(string nodeId) + { + if(GetNodeType(nodeId) != Define.NODE_TYPE_MULTI_INSTANCE) + { + throw new Exception("当前节点不是会签节点,请联系管理员"); + } + + var node = Nodes[nodeId]; + string[] makerList = Array.Empty(); // 执行人列表 + var sugarClient = AutofacContainerModule.GetService(); + + if (node.setInfo.NodeDesignate == Define.SPECIAL_USER) //指定成员 + { + makerList = node.setInfo.NodeDesignateData.datas; + } + else if (node.setInfo.NodeDesignate == Define.SPECIAL_ROLE) //指定角色 + { + var revelanceApp = AutofacContainerModule.GetService(); + makerList = revelanceApp.Get(Define.USERROLE, false, node.setInfo.NodeDesignateData.datas).ToArray(); + } + else if (node.setInfo.NodeDesignate == Define.SPECIAL_SQL) //指定SQL + { + //如果是指定SQL,则需要执行SQL,并返回结果 + var sql = ReplaceSql(node.setInfo.NodeDesignateData.datas[0]); + + makerList = sugarClient.Ado.SqlQuery(sql).ToArray(); + } + else + { + throw new Exception("会签节点,不支持该类型,请重新设计流程模板"); + } + + //写入到FlowApprover + var users = sugarClient.Queryable().Where(u => makerList.Contains(u.Id)).ToList(); + int order = 1; + foreach (var user in users) + { + var flowApprover = new FlowApprover + { + InstanceId = flowInstanceId, + ActivityId = nodeId, + ApproverId = user.Id, + ApproverName = user.Name, + OrderNo = order++, + ApproveType = node.setInfo.NodeConfluenceType, + ReturnToSignNode = false, + Reason = "", + CreateDate = DateTime.Now + }; + sugarClient.Insertable(flowApprover).ExecuteCommand(); + } + return GenericHelpers.ArrayToString(makerList, ""); + } + /// /// 计算节点执行人 ///