Exemplo n.º 1
0
        /// <summary>
        /// 节点会签审核
        /// </summary>
        /// <param name="nodeId"></param>
        /// <param name="tag"></param>
        /// <returns>-1不通过,1等待,其它通过</returns>
        public string NodeConfluence(string nodeId, Tag tag)
        {
            var forkToThisLine = ToNodeLines[nodeId].FirstOrDefault();

            if (forkToThisLine == null)
            {
                throw (new Exception("该会签节点没有来源,请检查流程结构"));
            }

            var    forkNode   = Nodes[forkToThisLine.from];           //会签开始节点
            string joinNodeId = GetNextNodeId(nodeId);                //获取会签的合流节点

            int    allnum = FromNodeLines[forkToThisLine.from].Count; //总会签数量
            string res    = string.Empty;                             //记录会签的结果,默认正在会签

            if (forkNode.setInfo.NodeConfluenceType == "one")         //有一个步骤通过即可
            {
                if (tag.Taged == (int)TagState.Ok)
                {
                    res = GetNextNodeId(joinNodeId);
                }
                else if (tag.Taged == (int)TagState.No)
                {
                    if (forkNode.setInfo.ConfluenceNo == null)
                    {
                        forkNode.setInfo.ConfluenceNo = 1;
                    }
                    else if (forkNode.setInfo.ConfluenceNo == (allnum - 1))
                    {
                        res = TagState.No.ToString("D");
                    }
                    else
                    {
                        forkNode.setInfo.ConfluenceNo++;
                    }
                }
            }
            else //默认所有步骤通过
            {
                if (tag.Taged == (int)TagState.No)   //只要有一个不同意,那么流程就结束
                {
                    res = TagState.No.ToString("D");
                }
                else if (tag.Taged == (int)TagState.Ok)
                {
                    if (forkNode.setInfo.ConfluenceOk == null)
                    {
                        forkNode.setInfo.ConfluenceOk = 1;
                    }
                    else if (forkNode.setInfo.ConfluenceOk == (allnum - 1))  //会签成功
                    {
                        res = GetNextNodeId(joinNodeId);
                    }
                    else
                    {
                        forkNode.setInfo.ConfluenceOk++;
                    }
                }
            }

            if (res == TagState.No.ToString("D"))
            {
                tag.Taged = (int)TagState.No;
                MakeTagNode(joinNodeId, tag);
            }
            else if (!string.IsNullOrEmpty(res)) //会签结束,标记合流节点
            {
                tag.Taged = (int)TagState.Ok;
                MakeTagNode(joinNodeId, tag);
                nextNodeId   = res;
                nextNodeType = GetNodeType(res);
            }
            else
            {
                nextNodeId   = joinNodeId;
                nextNodeType = GetNodeType(joinNodeId);
            }
            return(res);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 节点会签审核
        /// </summary>
        /// <param name="nodeId"></param>
        /// <param name="tag"></param>
        /// <returns>-1不通过,1等待,其它通过</returns>
        public string NodeConfluence(string nodeId, Tag tag)
        {
            string res        = "-1";
            string joinNodeId = GetNextNode(nodeId); //获取回签的合流节点

            if (joinNodeId == "-1")
            {
                throw (new Exception("寻找不到会签下合流节点"));
            }

            Dictionary <string, List <FlowLine> > toLines = GetToLines(_runtimeModel.schemeContentJson);
            int allnum = toLines[joinNodeId].Count;   //总会签数量

            int i = 0;

            foreach (var item in _runtimeModel.schemeContentJson.nodes)
            {
                if (item.id != joinNodeId)
                {
                    i++;
                    continue;
                }

                if (string.IsNullOrEmpty(item.setInfo.NodeConfluenceType)) //默认所有步骤通过
                {
                    if (tag.Taged == 1)
                    {
                        if (item.setInfo.ConfluenceOk == null)
                        {
                            _runtimeModel.schemeContentJson.nodes[i].setInfo.ConfluenceOk = 1;
                            res = "1";
                        }
                        else if (item.setInfo.ConfluenceOk == (allnum - 1))  //会签成功
                        {
                            res = GetNextNode(joinNodeId);
                            if (res == "-1")
                            {
                                throw (new Exception("会签成功寻找不到下一个节点"));
                            }
                        }
                        else
                        {
                            _runtimeModel.schemeContentJson.nodes[i].setInfo.ConfluenceOk++;
                            res = "1";
                        }
                    }
                }
                //else if (item.setInfo.NodeConfluenceType == "1") //1一个步骤通过即可
                //{
                //    if (tag.Taged == 1)
                //    {
                //        res = GetNextNodeId(nextNodeId);
                //        if (res == "-1")
                //        {
                //            throw (new Exception("会签成功寻找不到下一个节点"));
                //        }
                //    }
                //    else
                //    {
                //        if (item.setInfo.ConfluenceNo == null)
                //        {
                //            _runtimeModel.schemeContentJson.nodes[i].setInfo.ConfluenceNo = 1;
                //            res = "1";
                //        }
                //        else if (item.setInfo.ConfluenceNo == (allnum - 1))
                //        {
                //            res = "-1";
                //        }
                //        else
                //        {
                //            _runtimeModel.schemeContentJson.nodes[i].setInfo.ConfluenceNo++;
                //            res = "1";
                //        }
                //    }
                //}
            }



            if (res == "-1")
            {
                tag.Taged = -1;
                MakeTagNode(joinNodeId, tag);
            }
            else if (res != "1") //这时res是会签结束节点后面的一个节点
            {
                tag.Taged = 1;
                MakeTagNode(joinNodeId, tag);
                _runtimeModel.nextNodeId   = res;
                _runtimeModel.nextNodeType = GetNodeType(res);
            }
            else
            {
                _runtimeModel.nextNodeId   = joinNodeId;
                _runtimeModel.nextNodeType = GetNodeType(joinNodeId);
            }
            return(res);
        }