/// <summary> /// 节点会签审核 /// </summary> /// <param name="nodeId">会签时,currentNodeId是会签开始节点。这个表示当前正在处理的节点</param> /// <param name="tag"></param> /// <returns>-1不通过,1等待,其它通过</returns> public string NodeConfluence(string nodeId, Tag tag) { var forkNode = Nodes[currentNodeId]; //会签开始节点 FlowNode nextNode = GetNextNode(nodeId); //获取当前处理的下一个节点 int forkNumber = FromNodeLines[currentNodeId].Count; //直接与会签节点连接的点,即会签分支数目 string res = string.Empty; //记录会签的结果,默认正在会签 if (forkNode.setInfo.NodeConfluenceType == "one") //有一个步骤通过即可 { if (tag.Taged == (int)TagState.Ok) { if (nextNode.type == FlowNode.JOIN) //下一个节点是会签结束,则该线路结束 { res = GetNextNodeId(nextNode.id); } } else if (tag.Taged == (int)TagState.No) { if (forkNode.setInfo.ConfluenceNo == null) { forkNode.setInfo.ConfluenceNo = 1; } else if (forkNode.setInfo.ConfluenceNo == (forkNumber - 1)) { res = TagState.No.ToString("D"); } else { bool isFirst = true; //是不是从会签开始到现在第一个 var preNode = GetPreNode(nodeId); while (preNode.id != forkNode.id) //反向一直到会签开始节点 { if (preNode.setInfo != null && preNode.setInfo.Taged == (int)TagState.No) { isFirst = false; break; } } if (isFirst) { forkNode.setInfo.ConfluenceNo++; } } } } else //默认所有步骤通过 { if (tag.Taged == (int)TagState.No) //只要有一个不同意,那么流程就结束 { res = TagState.No.ToString("D"); } else if (tag.Taged == (int)TagState.Ok) { if (nextNode.type == FlowNode.JOIN) //这种模式下只有坚持到【会签结束】节点之前才有意义,是否需要判定这条线所有的节点都通过,不然直接执行这个节点?? { if (forkNode.setInfo.ConfluenceOk == null) { forkNode.setInfo.ConfluenceOk = 1; } else if (forkNode.setInfo.ConfluenceOk == (forkNumber - 1)) //会签成功 { res = GetNextNodeId(nextNode.id); } else { forkNode.setInfo.ConfluenceOk++; } } } } if (res == TagState.No.ToString("D")) { tag.Taged = (int)TagState.No; MakeTagNode(nextNode.id, tag); } else if (!string.IsNullOrEmpty(res)) //会签结束,标记合流节点 { tag.Taged = (int)TagState.Ok; MakeTagNode(nextNode.id, tag); nextNodeId = res; nextNodeType = GetNodeType(res); } else { nextNodeId = nextNode.id; nextNodeType = GetNodeType(nextNode.id); } return(res); }
/// <summary> /// 節點會簽審核 /// </summary> /// <param name="nodeId">會簽時,currentNodeId是會簽開始節點。這個表示當前正在處理的節點</param> /// <param name="tag"></param> /// <returns>-1不通過,1等待,其它通過</returns> public string NodeConfluence(string nodeId, Tag tag) { var forkNode = Nodes[currentNodeId]; //會簽開始節點 FlowNode nextNode = GetNextNode(nodeId); //獲取當前處理的下一個節點 int forkNumber = FromNodeLines[currentNodeId].Count; //直接與會簽節點連線的點,即會簽分支數目 string res = string.Empty; //記錄會簽的結果,預設正在會簽 if (forkNode.setInfo.NodeConfluenceType == "one") //有一個步驟通過即可 { if (tag.Taged == (int)TagState.Ok) { if (nextNode.type == FlowNode.JOIN) //下一個節點是會簽結束,則該線路結束 { res = GetNextNodeId(nextNode.id); } } else if (tag.Taged == (int)TagState.No) { if (forkNode.setInfo.ConfluenceNo == null) { forkNode.setInfo.ConfluenceNo = 1; } else if (forkNode.setInfo.ConfluenceNo == (forkNumber - 1)) { res = TagState.No.ToString("D"); } else { bool isFirst = true; //是不是從會簽開始到現在第一個 var preNode = GetPreNode(nodeId); while (preNode.id != forkNode.id) //反向一直到會簽開始節點 { if (preNode.setInfo != null && preNode.setInfo.Taged == (int)TagState.No) { isFirst = false; break; } } if (isFirst) { forkNode.setInfo.ConfluenceNo++; } } } } else //預設所有步驟通過 { if (tag.Taged == (int)TagState.No) //只要有一個不同意,那麼流程就結束 { res = TagState.No.ToString("D"); } else if (tag.Taged == (int)TagState.Ok) { if (nextNode.type == FlowNode.JOIN) //這種模式下只有堅持到【會簽結束】節點之前才有意義,是否需要判定這條線所有的節點都通過,不然直接執行這個節點?? { if (forkNode.setInfo.ConfluenceOk == null) { forkNode.setInfo.ConfluenceOk = 1; } else if (forkNode.setInfo.ConfluenceOk == (forkNumber - 1)) //會簽成功 { res = GetNextNodeId(nextNode.id); } else { forkNode.setInfo.ConfluenceOk++; } } } } if (res == TagState.No.ToString("D")) { tag.Taged = (int)TagState.No; MakeTagNode(nextNode.id, tag); } else if (!string.IsNullOrEmpty(res)) //會簽結束,標記合流節點 { tag.Taged = (int)TagState.Ok; MakeTagNode(nextNode.id, tag); nextNodeId = res; nextNodeType = GetNodeType(res); } else { nextNodeId = nextNode.id; nextNodeType = GetNodeType(nextNode.id); } return(res); }