Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }