示例#1
0
        public static void Reset(string projectId, string flowCode, ProjectStatus?status = null)
        {
            var nodes = ProjectNode.Search(e => e.ProjectId == projectId && e.FlowCode == flowCode && e.Status != ProjectNodeStatus.UnFinish).ToList();

            nodes.ForEach(n =>
            {
                var nodeInfo = NodeInfo.FirstOrDefault(e => e.Code == n.NodeCode);
                if (nodeInfo.ClearStatus)
                {
                    n.Status = ProjectNodeStatus.UnFinish;
                }
                else
                {
                    n.Status = ProjectNodeStatus.Pending;
                }
            });
            ProjectNode.Update(nodes.ToArray());
            var projectInfo = FirstOrDefault(p => p.ProjectId == projectId && p.FlowCode == flowCode);

            projectInfo.NodeCode     = NodeCodeRef.Start;
            projectInfo.NodeNameENUS = "Start";
            projectInfo.NodeNameZHCN = "开始";
            if (status.HasValue)
            {
                projectInfo.Status = status.Value;
            }
            else
            {
                projectInfo.Status = ProjectStatus.UnFinish;
            }
            projectInfo.Update();
            UpdateProjectStatus(projectId, GetMainProjectFlowCode(flowCode), ProjectStatus.UnFinish);
        }
示例#2
0
        public static ProjectNode FinishProjectNode(string projectId, string flowCode, string nodeCode)
        {
            var maxSeq      = NodeInfo.Search(e => e.FlowCode == flowCode).Max(e => e.Sequence);
            var maxNodeCode = NodeInfo.FirstOrDefault(e => e.FlowCode == flowCode && e.Sequence == maxSeq).Code;

            if (nodeCode == NodeCodeDef.Finish)
            {
                nodeCode = maxNodeCode;
            }
            var         projectNode = Search(e => e.ProjectId == projectId && e.FlowCode == flowCode && e.NodeCode == nodeCode && e.IsHistory == false).FirstOrDefault();
            ProjectNode nextNode = projectNode.GetNextNode(), prevNode = projectNode.GetPrevNode(), currentNode = projectNode;

            if (prevNode != null)
            {
                if (prevNode.Status == ProjectNodeStatus.Finish)
                {
                    projectNode.Status = ProjectNodeStatus.Finish;
                }
                else
                {
                    projectNode.Status = ProjectNodeStatus.Pending;
                    while (prevNode != null)
                    {
                        if (prevNode.Status == ProjectNodeStatus.Finish)
                        {
                            currentNode = prevNode;
                            break;
                        }
                        prevNode = prevNode.GetPrevNode();
                    }
                }
            }
            else
            {
                projectNode.Status = ProjectNodeStatus.Finish;
            }
            if (projectNode.Status == ProjectNodeStatus.Finish)
            {
                while (nextNode != null && nextNode.Status == ProjectNodeStatus.Pending)
                {
                    nextNode.Status = ProjectNodeStatus.Finish;
                    nextNode.Update();
                    currentNode = nextNode;
                    nextNode    = nextNode.GetNextNode();
                }
            }
            projectNode.Update();
            if (currentNode.NodeCode == maxNodeCode)
            {
                currentNode = ProjectNode.FinishNode;
            }
            return(currentNode);
        }
示例#3
0
        public static void UnFinishNode(string projectId, string flowCode, string nodeCode, ProjectStatus?status = null)
        {
            var currentProjectNode = ProjectNode.UnFinishProjectNode(projectId, flowCode, nodeCode);
            var node        = NodeInfo.FirstOrDefault(e => e.Code == currentProjectNode.NodeCode);
            var projectInfo = FirstOrDefault(p => p.ProjectId == projectId && p.FlowCode == flowCode);

            projectInfo.NodeCode     = node.Code;
            projectInfo.NodeNameENUS = node.NameENUS;
            projectInfo.NodeNameZHCN = node.NameZHCN;
            if (status.HasValue)
            {
                projectInfo.Status = status.Value;
            }
            projectInfo.Update();
        }