mirror of
https://gitee.com/dotnetchina/OpenAuth.Net.git
synced 2025-09-18 17:48:01 +08:00
refactor: 将会签->网关
This commit is contained in:
@@ -50,7 +50,7 @@
|
||||
public const string NODE_TYPE_TASK = "node"; //任务节点
|
||||
public const string NODE_TYPE_FORK = "fork"; //网关开始
|
||||
public const string NODE_TYPE_JOIN = "join"; //网关结束
|
||||
public const string NODE_TYPE_MULTI_INSTANCE = "multiInstance"; //多实例/会签节点
|
||||
public const string NODE_TYPE_MULTI_INSTANCE = "multiInstance"; //多实例、会签节点
|
||||
|
||||
//流程实例知会用户
|
||||
public const string INSTANCE_NOTICE_USER = "INSTANCE_NOTICE_USER";
|
||||
|
@@ -53,18 +53,18 @@
|
||||
public string Description { get; set; }
|
||||
public string TagedTime { get; set; }
|
||||
|
||||
//节点会签方式,
|
||||
//网关审批通过的方式,
|
||||
//all/空:默认为全部通过
|
||||
//one :至少有一个通过
|
||||
public string NodeConfluenceType { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 会签通过的个数
|
||||
/// 网关通过的个数
|
||||
/// </summary>
|
||||
public int? ConfluenceOk { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 会签拒绝的个数
|
||||
/// 网关拒绝的个数
|
||||
/// </summary>
|
||||
public int? ConfluenceNo { get; set; }
|
||||
|
||||
|
@@ -39,7 +39,7 @@ namespace OpenAuth.App.Flow
|
||||
previousId = instance.PreviousId;
|
||||
flowInstanceId = instance.Id;
|
||||
|
||||
//会签开始节点和流程结束节点没有下一步
|
||||
//网关开始节点和流程结束节点没有下一步
|
||||
if (GetCurrentNodeType() == Define.NODE_TYPE_FORK || GetCurrentNodeType() == Define.NODE_TYPE_END)
|
||||
{
|
||||
nextNodeId = "-1";
|
||||
@@ -156,9 +156,8 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取实例接下来运行的状态
|
||||
/// 获取实例接下来运行的节点类型
|
||||
/// </summary>
|
||||
/// <returns>-1无法运行,0会签开始,1会签结束,2一般节点,4流程运行结束</returns>
|
||||
public string GetNextNodeType()
|
||||
{
|
||||
if (nextNodeId != "-1")
|
||||
@@ -169,7 +168,7 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取节点类型 0会签开始,1会签结束,2一般节点,开始节点,4流程运行结束
|
||||
/// 获取节点类型
|
||||
/// </summary>
|
||||
/// <param name="nodeId"></param>
|
||||
/// <returns></returns>
|
||||
@@ -188,23 +187,23 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 节点会签审核
|
||||
/// 审批网关开始节点
|
||||
/// </summary>
|
||||
/// <param name="nodeId">会签时,currentNodeId是会签开始节点。这个表示当前正在处理的节点</param>
|
||||
/// <param name="nodeId">currentNodeId是网关开始节点。这个表示当前正在处理的节点</param>
|
||||
/// <param name="tag"></param>
|
||||
/// <returns>-1不通过,1等待,其它通过</returns>
|
||||
public string NodeConfluence(HttpClient httpClient, Tag tag)
|
||||
public string VerifyGatewayStart(HttpClient httpClient, Tag tag)
|
||||
{
|
||||
var user = AutofacContainerModule.GetService<IAuth>().GetCurrentUser().User;
|
||||
//会签时的【当前节点】一直是会签开始节点
|
||||
//TODO: 标记会签节点的状态,这个地方感觉怪怪的
|
||||
//审批网关时的【当前节点】一直是网关开始节点
|
||||
//TODO: 标记网关节点的状态,这个地方感觉怪怪的
|
||||
MakeTagNode(currentNodeId, tag);
|
||||
|
||||
string canCheckId = ""; //寻找当前登录用户可审核的节点Id
|
||||
foreach (string fromForkStartNodeId in FromNodeLines[currentNodeId]
|
||||
.Select(u => u.to))
|
||||
{
|
||||
var fromForkStartNode = Nodes[fromForkStartNodeId]; //与会前开始节点直接连接的节点
|
||||
var fromForkStartNode = Nodes[fromForkStartNodeId]; //与网关开始节点直接连接的节点
|
||||
canCheckId = GetOneForkLineCanCheckNodeId(fromForkStartNode, tag);
|
||||
if (!string.IsNullOrEmpty(canCheckId)) break;
|
||||
}
|
||||
@@ -221,18 +220,18 @@ namespace OpenAuth.App.Flow
|
||||
|
||||
MakeTagNode(canCheckId, tag); //标记审核节点状态
|
||||
|
||||
var forkNode = Nodes[currentNodeId]; //会签开始节点
|
||||
var forkNode = Nodes[currentNodeId]; //网关开始节点
|
||||
FlowNode nextNode = GetNextNode(canCheckId); //获取当前处理的下一个节点
|
||||
|
||||
int forkNumber = FromNodeLines[currentNodeId].Count; //直接与会签节点连接的点,即会签分支数目
|
||||
string res = string.Empty; //记录会签的结果,默认正在会签
|
||||
int forkNumber = FromNodeLines[currentNodeId].Count; //直接与网关节点连接的点,即网关分支数目
|
||||
string gatewayResult = string.Empty; //记录网关审批的的结果,为空表示仍然在网关内部处理
|
||||
if (forkNode.setInfo.NodeConfluenceType == "one") //有一个步骤通过即可
|
||||
{
|
||||
if (tag.Taged == (int)TagState.Ok)
|
||||
{
|
||||
if (nextNode.type == Define.NODE_TYPE_JOIN) //下一个节点是会签结束,则该线路结束
|
||||
if (nextNode.type == Define.NODE_TYPE_JOIN) //下一个节点是网关结束,则该线路结束
|
||||
{
|
||||
res = GetNextNodeId(nextNode.id);
|
||||
gatewayResult = GetNextNodeId(nextNode.id);
|
||||
}
|
||||
}
|
||||
else if (tag.Taged == (int)TagState.No)
|
||||
@@ -243,13 +242,13 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
else if (forkNode.setInfo.ConfluenceNo == (forkNumber - 1))
|
||||
{
|
||||
res = TagState.No.ToString("D");
|
||||
gatewayResult = TagState.No.ToString("D");
|
||||
}
|
||||
else
|
||||
{
|
||||
bool isFirst = true; //是不是从会签开始到现在第一个
|
||||
bool isFirst = true; //是不是从网关开始到现在第一个
|
||||
var preNode = GetPreNode(canCheckId);
|
||||
while (preNode.id != forkNode.id) //反向一直到会签开始节点
|
||||
while (preNode.id != forkNode.id) //反向一直到网关开始节点
|
||||
{
|
||||
if (preNode.setInfo != null && preNode.setInfo.Taged == (int)TagState.No)
|
||||
{
|
||||
@@ -265,23 +264,23 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
}
|
||||
}
|
||||
else //默认所有步骤通过
|
||||
else //所有步骤通过
|
||||
{
|
||||
if (tag.Taged == (int)TagState.No) //只要有一个不同意,那么流程就结束
|
||||
{
|
||||
res = TagState.No.ToString("D");
|
||||
gatewayResult = TagState.No.ToString("D");
|
||||
}
|
||||
else if (tag.Taged == (int)TagState.Ok)
|
||||
{
|
||||
if (nextNode.type == Define.NODE_TYPE_JOIN) //这种模式下只有坚持到【会签结束】节点之前才有意义,是否需要判定这条线所有的节点都通过,不然直接执行这个节点??
|
||||
if (nextNode.type == Define.NODE_TYPE_JOIN) //这种模式下只有坚持到【网关结束】节点之前才有意义,是否需要判定这条线所有的节点都通过,不然直接执行这个节点??
|
||||
{
|
||||
if (forkNode.setInfo.ConfluenceOk == null)
|
||||
{
|
||||
forkNode.setInfo.ConfluenceOk = 1;
|
||||
}
|
||||
else if (forkNode.setInfo.ConfluenceOk == (forkNumber - 1)) //会签成功
|
||||
else if (forkNode.setInfo.ConfluenceOk == (forkNumber - 1)) //网关成功
|
||||
{
|
||||
res = GetNextNodeId(nextNode.id);
|
||||
gatewayResult = GetNextNodeId(nextNode.id);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -291,28 +290,28 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
}
|
||||
|
||||
if (res == TagState.No.ToString("D"))
|
||||
if (gatewayResult == TagState.No.ToString("D"))
|
||||
{
|
||||
tag.Taged = (int)TagState.No;
|
||||
MakeTagNode(nextNode.id, tag);
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(res)) //会签结束,标记合流节点
|
||||
else if (!string.IsNullOrEmpty(gatewayResult)) //网关结束,标记合流节点
|
||||
{
|
||||
tag.Taged = (int)TagState.Ok;
|
||||
MakeTagNode(nextNode.id, tag);
|
||||
nextNodeId = res;
|
||||
nextNodeId = gatewayResult;
|
||||
}
|
||||
else
|
||||
{
|
||||
nextNodeId = nextNode.id;
|
||||
}
|
||||
|
||||
if (!string.IsNullOrEmpty(res)) //会签结束节点配置了回调,则发起通知
|
||||
if (!string.IsNullOrEmpty(gatewayResult)) //网关结束节点配置了回调,则发起通知
|
||||
{
|
||||
NotifyThirdParty(httpClient, nextNode, tag);
|
||||
}
|
||||
|
||||
return res;
|
||||
return gatewayResult;
|
||||
}
|
||||
|
||||
//获取上一个节点
|
||||
@@ -615,7 +614,7 @@ namespace OpenAuth.App.Flow
|
||||
throw new Exception("无法寻找到下一个节点");
|
||||
}
|
||||
|
||||
if (GetNextNodeType() == Define.NODE_TYPE_FORK) //如果是会签节点
|
||||
if (GetNextNodeType() == Define.NODE_TYPE_FORK) //如果是网关节点
|
||||
{
|
||||
makerList = GetForkNodeMakers(nextNodeId);
|
||||
}
|
||||
@@ -768,7 +767,7 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 会签时,获取一条会签分支上面是否有用户可审核的节点
|
||||
/// 网关时,获取一条网关分支上面是否有用户可审核的节点
|
||||
/// </summary>
|
||||
/// <param name="fromForkStartNode"></param>
|
||||
/// <param name="tag"></param>
|
||||
@@ -777,7 +776,7 @@ namespace OpenAuth.App.Flow
|
||||
{
|
||||
string canCheckId = "";
|
||||
var node = fromForkStartNode;
|
||||
do //沿一条分支线路执行,直到遇到会签结束节点
|
||||
do //沿一条分支线路执行,直到遇到网关结束节点
|
||||
{
|
||||
var makerList = GetNodeMarkers(node);
|
||||
|
||||
@@ -795,16 +794,16 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取会签开始节点的所有可执行者
|
||||
/// 获取网关开始节点的所有可执行者
|
||||
/// </summary>
|
||||
/// <param name="forkNodeId">会签开始节点</param>
|
||||
/// <param name="forkNodeId">网关开始节点</param>
|
||||
/// <returns></returns>
|
||||
public string GetForkNodeMakers(string forkNodeId)
|
||||
{
|
||||
string makerList = "";
|
||||
foreach (string fromForkStartNodeId in FromNodeLines[forkNodeId].Select(u => u.to))
|
||||
{
|
||||
var fromForkStartNode = Nodes[fromForkStartNodeId]; //与会签开始节点直接连接的节点
|
||||
var fromForkStartNode = Nodes[fromForkStartNodeId]; //与网关开始节点直接连接的节点
|
||||
if (makerList != "")
|
||||
{
|
||||
makerList += ",";
|
||||
@@ -817,9 +816,9 @@ namespace OpenAuth.App.Flow
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取会签一条线上的审核者,该审核者应该是已审核过的节点的下一个人
|
||||
/// 获取网关一条线上的审核者,该审核者应该是已审核过的节点的下一个人
|
||||
/// </summary>
|
||||
/// <param name="fromForkStartNode">与会签开始节点直接连接的节点</param>
|
||||
/// <param name="fromForkStartNode">与网关开始节点直接连接的节点</param>
|
||||
private string GetOneForkLineMakers(FlowNode fromForkStartNode)
|
||||
{
|
||||
string markers = "";
|
||||
@@ -845,7 +844,7 @@ namespace OpenAuth.App.Flow
|
||||
|
||||
if (marker == "1")
|
||||
{
|
||||
throw new Exception($"节点{node.name}是会签节点,不能用所有人,请检查!");
|
||||
throw new Exception($"节点{node.name}是网关节点,不能用所有人,请检查!");
|
||||
}
|
||||
|
||||
if (markers != "")
|
||||
|
@@ -2,7 +2,7 @@
|
||||
* @Author: yubaolee <yubaolee@163.com> | ahfu~ <954478625@qq.com>
|
||||
* @Date: 2024-12-13 16:55:17
|
||||
* @Description: 工作流实例表操作
|
||||
* @LastEditTime: 2025-04-10 00:02:15
|
||||
* @LastEditTime: 2025-04-17 21:37:03
|
||||
* Copyright (c) 2024 by yubaolee | ahfu~ , All Rights Reserved.
|
||||
*/
|
||||
|
||||
@@ -330,7 +330,7 @@ namespace OpenAuth.App
|
||||
|
||||
if (wfruntime.GetCurrentNodeType() == Define.NODE_TYPE_FORK) //当前节点是网关开始节点
|
||||
{
|
||||
CounterSign(wfruntime, tag, flowInstance);
|
||||
VerifyGatewayStart(wfruntime, tag, flowInstance);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -388,17 +388,17 @@ namespace OpenAuth.App
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 会签
|
||||
/// 网关
|
||||
/// </summary>
|
||||
private void CounterSign(FlowRuntime wfruntime, Tag tag, FlowInstance flowInstance)
|
||||
private void VerifyGatewayStart(FlowRuntime wfruntime, Tag tag, FlowInstance flowInstance)
|
||||
{
|
||||
string res = wfruntime.NodeConfluence(_httpClientFactory.CreateClient(), tag);
|
||||
string res = wfruntime.VerifyGatewayStart(_httpClientFactory.CreateClient(), tag);
|
||||
|
||||
if (res == TagState.No.ToString("D"))
|
||||
{
|
||||
flowInstance.IsFinish = FlowInstanceStatus.Disagree;
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(res)) //会签结束,当前活动节点变为会签结束节点的下一个节点
|
||||
else if (!string.IsNullOrEmpty(res)) //网关结束,当前活动节点变为网关结束节点的下一个节点
|
||||
{
|
||||
flowInstance.PreviousId = flowInstance.ActivityId;
|
||||
flowInstance.ActivityId = wfruntime.nextNodeId;
|
||||
@@ -413,7 +413,7 @@ namespace OpenAuth.App
|
||||
}
|
||||
else
|
||||
{
|
||||
//会签过程中,需要更新用户
|
||||
//网关过程中,需要更新用户
|
||||
flowInstance.MakerList = wfruntime.GetForkNodeMakers(wfruntime.currentNodeId);
|
||||
wfruntime.SaveTransitionHis();
|
||||
}
|
||||
|
Reference in New Issue
Block a user